From 1f29f5966d7cf9411a500e4dc4de5992ec803276 Mon Sep 17 00:00:00 2001 From: Cryptite Date: Tue, 21 Sep 2021 08:11:38 -0500 Subject: [PATCH] First commit stuff --- .github/workflows/build.yml | 32 +++++++ README.md | 37 ++++++++ build-data/dev-imports.txt | 10 ++ build.gradle.kts | 119 ++++++++++++++++++++++++ gradle.properties | 9 ++ patches/server/0001-Build-changes.patch | 78 ++++++++++++++++ settings.gradle.kts | 10 ++ 7 files changed, 295 insertions(+) create mode 100644 .github/workflows/build.yml create mode 100644 README.md create mode 100644 build-data/dev-imports.txt create mode 100644 build.gradle.kts create mode 100644 gradle.properties create mode 100644 patches/server/0001-Build-changes.patch create mode 100644 settings.gradle.kts diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 000000000..45f806e5a --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,32 @@ +name: Patch and Build +on: [ push, pull_request ] +jobs: + build: + # Only run on PRs if the source branch is on someone else's repo + if: ${{ github.event_name != 'pull_request' || github.repository != github.event.pull_request.head.repo.full_name }} + runs-on: ubuntu-latest + steps: + - name: Checkout Git Repository + uses: actions/checkout@v2 + - name: Validate Gradle wrapper + uses: gradle/wrapper-validation-action@v1 + - name: Cache Gradle + uses: actions/cache@v2 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties', '**/gradle.properties') }} + restore-keys: | + ${{ runner.os }}-gradle- + - name: Set up JDK + uses: actions/setup-java@v2.3.0 + with: + distribution: 'temurin' + java-version: '16' + - name: Configure Git User Details + run: git config --global user.email "actions@github.com" && git config --global user.name "Github Actions" + - name: Apply Patches + run: ./gradlew applyPatches --stacktrace + - name: Build + run: ./gradlew build --stacktrace diff --git a/README.md b/README.md new file mode 100644 index 000000000..6f9759648 --- /dev/null +++ b/README.md @@ -0,0 +1,37 @@ +# ForkTest - A Paper fork, using paperweight + +This is an example project, showcasing how to setup a fork of Paper (or any other fork using paperweight), using paperweight. + +The files of most interest are +- build.gradle.kts +- settings.gradle.kts +- gradle.properties + +## Tasks + +``` +Paperweight tasks +----------------- +applyApiPatches +applyPatches +applyServerPatches +cleanCache - Delete the project setup cache and task outputs. +generateDevelopmentBundle +paperclipJar - Build a runnable paperclip jar +rebuildApiPatches +rebuildPatches +rebuildServerPatches +reobfJar - Re-obfuscate the built jar to obf mappings +runDev - Spin up a non-shaded non-remapped test server +runReobf - Spin up a test server from the reobfJar output jar +runShadow - Spin up a test server from the shadowJar archiveFile +``` + +## Branches + +Each branch of this project represents an example: + + - [`main` is the standard example](https://github.com/PaperMC/paperweight-examples/tree/main) + - [`submodules` shows how paperweight can be applied on a fork using the more traditional git submodule system](https://github.com/PaperMC/paperweight-examples/tree/submodules) + - [`mojangapi` shows how a fork could patch arbitrary non-git directories (such as `Paper-MojangAPI`)](https://github.com/PaperMC/paperweight-examples/tree/mojangapi) + - [`submodules-mojang` shows the same as `mojangapi`, but on the git submodules setup from `submodules`](https://github.com/PaperMC/paperweight-examples/tree/submodules-mojangapi) diff --git a/build-data/dev-imports.txt b/build-data/dev-imports.txt new file mode 100644 index 000000000..b818b96e2 --- /dev/null +++ b/build-data/dev-imports.txt @@ -0,0 +1,10 @@ +# You can use this file to import files from minecraft libraries into the project +# format: +# +# both fully qualified and a file based syntax are accepted for : +# authlib com/mojang/authlib/yggdrasil/YggdrasilGameProfileRepository.java +# datafixerupper com.mojang.datafixers.DataFixerBuilder +# datafixerupper com/mojang/datafixers/util/Either.java +# To import classes from the vanilla Minecraft jar use `minecraft` as the artifactId: +# minecraft net.minecraft.world.level.entity.LevelEntityGetterAdapter +# minecraft net/minecraft/world/level/entity/LevelEntityGetter.java diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 000000000..04ae97c08 --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,119 @@ +import io.papermc.paperweight.util.constants.* + +plugins { + java + `maven-publish` + id("com.github.johnrengelman.shadow") version "7.0.0" apply false + id("io.papermc.paperweight.patcher") version "1.1.11" +} + +repositories { + mavenCentral() + maven("https://papermc.io/repo/repository/maven-public/") { + content { onlyForConfigurations(PAPERCLIP_CONFIG) } + } +} + +dependencies { + remapper("org.quiltmc:tiny-remapper:0.4.3") + decompiler("net.minecraftforge:forgeflower:1.5.498.12") + paperclip("io.papermc:paperclip:2.0.1") +} + +allprojects { + apply(plugin = "java") + apply(plugin = "maven-publish") + + java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(16)) + } + } +} + +subprojects { + tasks.withType { + options.encoding = Charsets.UTF_8.name() + options.release.set(16) + } + tasks.withType { + options.encoding = Charsets.UTF_8.name() + } + tasks.withType { + filteringCharset = Charsets.UTF_8.name() + } + + repositories { + mavenCentral() + maven("https://oss.sonatype.org/content/groups/public/") + maven("https://papermc.io/repo/repository/maven-public/") + maven("https://ci.emc.gs/nexus/content/groups/aikar/") + maven("https://repo.aikar.co/content/groups/aikar") + maven("https://repo.md-5.net/content/repositories/releases/") + maven("https://hub.spigotmc.org/nexus/content/groups/public/") + } +} + +paperweight { + serverProject.set(project(":ForkTest-Server")) + + remapRepo.set("https://maven.quiltmc.org/repository/release/") + decompileRepo.set("https://files.minecraftforge.net/maven/") + + usePaperUpstream(providers.gradleProperty("paperRef")) { + withPaperPatcher { + apiPatchDir.set(layout.projectDirectory.dir("patches/api")) + apiOutputDir.set(layout.projectDirectory.dir("ForkTest-API")) + + serverPatchDir.set(layout.projectDirectory.dir("patches/server")) + serverOutputDir.set(layout.projectDirectory.dir("ForkTest-Server")) + } + } +} + +// +// Everything below here is optional if you don't care about publishing API or dev bundles to your repository +// + +tasks.generateDevelopmentBundle { + apiCoordinates.set("com.example.paperfork:forktest-api") + mojangApiCoordinates.set("io.papermc.paper:paper-mojangapi") + libraryRepositories.set( + listOf( + "https://libraries.minecraft.net/", + "https://maven.quiltmc.org/repository/release/", + "https://repo.aikar.co/content/groups/aikar", + "https://ci.emc.gs/nexus/content/groups/aikar/", + "https://papermc.io/repo/repository/maven-public/", // for paper-mojangapi + // "https://my.repo/" // This should be a repo hosting your API (in this example, 'com.example.paperfork:forktest-api') + ) + ) +} + +allprojects { + // Publishing API: + // ./gradlew :ForkTest-API:publish[ToMavenLocal] + publishing { + repositories { + maven { + name = "Slice" + url = uri("http://ysera.dyndns.org:8090/releases") + // See Gradle docs for how to provide credentials to PasswordCredentials + // https://docs.gradle.org/current/samples/sample_publishing_credentials.html + credentials(PasswordCredentials::class) + } + } + } +} + +publishing { + // Publishing dev bundle: + // ./gradlew publishDevBundlePublicationTo(MavenLocal|MyRepoSnapshotsRepository) -PpublishDevBundle + if (project.hasProperty("publishDevBundle")) { + publications.create("devBundle") { + artifact(tasks.generateDevelopmentBundle) { + artifactId = "dev-bundle" + } + } + } +} diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 000000000..2288d3004 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,9 @@ +group=com.example.paperfork +version=1.17.1-R0.1-SNAPSHOT + +mcVersion=1.17.1 +paperRef=61a09c51023c53997c31ef24849a99262f7ddaf0 + +org.gradle.caching=true +org.gradle.parallel=true +org.gradle.vfs.watch=false diff --git a/patches/server/0001-Build-changes.patch b/patches/server/0001-Build-changes.patch new file mode 100644 index 000000000..438f3274d --- /dev/null +++ b/patches/server/0001-Build-changes.patch @@ -0,0 +1,78 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: MiniDigger +Date: Sat, 12 Jun 2021 16:40:34 +0200 +Subject: [PATCH] Build changes + + +diff --git a/build.gradle.kts b/build.gradle.kts +index 1876481a830228fd15fcd2a4be5f2c28bd7e51fe..872b45c4ea41372c8cfb435cec46b643291a2fa5 100644 +--- a/build.gradle.kts ++++ b/build.gradle.kts +@@ -28,8 +28,8 @@ repositories { + } + + dependencies { +- implementation(project(":Paper-API")) +- implementation(project(":Paper-MojangAPI")) ++ implementation(project(":ForkTest-API")) // ForkTest ++ implementation("io.papermc.paper:paper-mojangapi:1.17.1-R0.1-SNAPSHOT") // ForkTest + // Paper start + implementation("org.jline:jline-terminal-jansi:3.12.1") + implementation("net.minecrell:terminalconsoleappender:1.2.0") +@@ -80,7 +80,7 @@ tasks.jar { + attributes( + "Main-Class" to "org.bukkit.craftbukkit.Main", + "Implementation-Title" to "CraftBukkit", +- "Implementation-Version" to "git-Paper-$implementationVersion", ++ "Implementation-Version" to "git-ForkTest-$implementationVersion", // ForkTest + "Implementation-Vendor" to date, // Paper + "Specification-Title" to "Bukkit", + "Specification-Version" to project.version, +@@ -205,7 +205,7 @@ tasks.test { + fun TaskContainer.registerRunTask( + name: String, block: JavaExec.() -> Unit + ): TaskProvider = register(name) { +- group = "paper" ++ group = "paperweight" + standardInput = System.`in` + workingDir = rootProject.layout.projectDirectory.dir( + providers.gradleProperty("runWorkDir").forUseAtConfigurationTime().orElse("run") +diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java +index 3dded5c491ace6b073a7bc3178976bd70f0b9393..72d637ffc00b536357af02a52defe996dceda3b9 100644 +--- a/src/main/java/net/minecraft/server/MinecraftServer.java ++++ b/src/main/java/net/minecraft/server/MinecraftServer.java +@@ -1651,7 +1651,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop // Spigot - Spigot > // CraftBukkit - cb > vanilla! ++ return "ForkTest"; //ForkTest - ForkTest > //Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla! + } + + public SystemReport fillSystemReport(SystemReport details) { +diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java +index 6d7f16fede01c19f638e1dcdae8b07b79cd86dc0..5b8132b32234536b89601813bdba17410803428a 100644 +--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java ++++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java +@@ -240,7 +240,7 @@ import javax.annotation.Nullable; // Paper + import javax.annotation.Nonnull; // Paper + + public final class CraftServer implements Server { +- private final String serverName = "Paper"; // Paper ++ private final String serverName = "ForkTest"; // ForkTest // Paper + private final String serverVersion; + private final String bukkitVersion = Versioning.getBukkitVersion(); + private final Logger logger = Logger.getLogger("Minecraft"); +diff --git a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java +index 774556a62eb240da42e84db4502e2ed43495be17..21f39bd0c33ef2635249298e6a247afba8b05742 100644 +--- a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java ++++ b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java +@@ -11,7 +11,7 @@ public final class Versioning { + public static String getBukkitVersion() { + String result = "Unknown-Version"; + +- InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/io.papermc.paper/paper-api/pom.properties"); ++ InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/com.example.paperfork/forktest-api/pom.properties"); // ForkTest + Properties properties = new Properties(); + + if (stream != null) { diff --git a/settings.gradle.kts b/settings.gradle.kts new file mode 100644 index 000000000..8fabfcfd6 --- /dev/null +++ b/settings.gradle.kts @@ -0,0 +1,10 @@ +pluginManagement { + repositories { + gradlePluginPortal() + maven("https://papermc.io/repo/repository/maven-public/") + } +} + +rootProject.name = "ForkTest" + +include("ForkTest-API", "ForkTest-Server")