Skip to content
Closed
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
6 changes: 6 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,12 @@ jobs:
name: PlanFabric-${{ env.versionString }}-${{ env.git_hash }}.jar
path: ${{ env.artifactPath }}/PlanFabric-${{ env.snapshotVersion }}.jar
archive: false
- name: 📤 Upload PlanNeoForge.jar
uses: actions/upload-artifact@v7
with:
name: PlanNeoForge-${{ env.versionString }}-${{ env.git_hash }}.jar
path: ${{ env.artifactPath }}/PlanNeoForge-${{ env.snapshotVersion }}.jar
archive: false
- name: 🚦 Setup Selenium Webdriver
uses: nanasess/setup-chromedriver@v2
- name: 🚦 Setup Selenium Webdriver settings
Expand Down
38 changes: 33 additions & 5 deletions .github/workflows/on-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ jobs:
uses: actions/checkout@v7
- name: Get Download URL
run: |
curl 'https://api.github.com/repos/plan-player-analytics/plan/releases/${{ github.event.release.id }}/assets' | jq -r '.[] | {name: .name, url: .browser_download_url} | select(.url | strings | test("Fabric") | not)' > asset.txt
curl 'https://api.github.com/repos/plan-player-analytics/plan/releases/${{ github.event.release.id }}/assets' | jq -r '.[] | {name: .name, url: .browser_download_url} | select(.url | strings | test("Fabric|NeoForge") | not)' > asset.txt
jq -r '.url' asset.txt > url.txt
echo "RELEASE_DOWNLOAD_URL=$(cat url.txt)" >> $GITHUB_ENV
- name: Write REL release line
Expand Down Expand Up @@ -70,7 +70,7 @@ jobs:
fetch-depth: 0
- name: Download release artifact for upload
run: |
curl 'https://api.github.com/repos/plan-player-analytics/plan/releases/${{ github.event.release.id }}/assets' | jq -r '.[] | {name: .name, url: .browser_download_url} | select(.url | strings | test("Fabric") | not)' > asset.txt
curl 'https://api.github.com/repos/plan-player-analytics/plan/releases/${{ github.event.release.id }}/assets' | jq -r '.[] | {name: .name, url: .browser_download_url} | select(.url | strings | test("Fabric|NeoForge") | not)' > asset.txt
jq -r '.url' asset.txt > url.txt
jq -r '.name' asset.txt > name.txt
wget -i url.txt
Expand Down Expand Up @@ -102,7 +102,7 @@ jobs:
fetch-depth: 0
- name: ⚙ Get Download URL
run: |
curl 'https://api.github.com/repos/plan-player-analytics/plan/releases/${{ github.event.release.id }}/assets' | jq -r '.[] | {name: .name, url: .browser_download_url} | select(.url | strings | test("Fabric") | not)' > asset.txt
curl 'https://api.github.com/repos/plan-player-analytics/plan/releases/${{ github.event.release.id }}/assets' | jq -r '.[] | {name: .name, url: .browser_download_url} | select(.url | strings | test("Fabric|NeoForge") | not)' > asset.txt
jq -r '.url' asset.txt > url.txt
echo "RELEASE_DOWNLOAD_URL=$(cat url.txt)" >> $GITHUB_ENV
- name: ☕ Setup JDK
Expand Down Expand Up @@ -137,8 +137,8 @@ jobs:
# Fetch all assets
curl 'https://api.github.com/repos/plan-player-analytics/plan/releases/${{ github.event.release.id }}/assets' > all_assets.json

# Download regular JAR (non-Fabric)
jq -r '.[] | {name: .name, url: .browser_download_url} | select(.url | strings | test("Fabric") | not)' all_assets.json > asset_regular.txt
# Download regular JAR (non-Fabric / non-NeoForge)
jq -r '.[] | {name: .name, url: .browser_download_url} | select(.url | strings | test("Fabric|NeoForge") | not)' all_assets.json > asset_regular.txt
jq -r '.url' asset_regular.txt > url_regular.txt
jq -r '.name' asset_regular.txt > name_regular.txt
wget -i url_regular.txt
Expand All @@ -151,6 +151,13 @@ jobs:
wget -i url_fabric.txt
echo "FABRIC_JAR=$(cat name_fabric.txt)" >> $GITHUB_ENV

# Download NeoForge JAR
jq -r '.[] | {name: .name, url: .browser_download_url} | select(.url | strings | test("NeoForge"))' all_assets.json > asset_neoforge.txt
jq -r '.url' asset_neoforge.txt > url_neoforge.txt
jq -r '.name' asset_neoforge.txt > name_neoforge.txt
wget -i url_neoforge.txt
echo "NEOFORGE_JAR=$(cat name_neoforge.txt)" >> $GITHUB_ENV

- name: Modrinth Upload - Plugin 🚀
uses: Kira-NT/mc-publish@v3
with:
Expand Down Expand Up @@ -196,3 +203,24 @@ jobs:
luckperms(optional){modrinth:Vebnzrzj}{curseforge:431733}
fabric-permissions-api-v0(optional){modrinth:lzVo0Dll}
java: 25

- name: Modrinth + Curseforge Upload - NeoForge 🚀
uses: Kira-NT/mc-publish@v3
with:
modrinth-id: plan
modrinth-token: ${{ secrets.MODRINTH_TOKEN }}
curseforge-id: 508727
curseforge-token: ${{ secrets.CF_API_TOKEN }}
files: ${{ env.NEOFORGE_JAR }}
name: ${{ github.event.release.name }}
version: ${{ env.FORMATTED_VERSION }}+neoforge
changelog: ${{ github.event.release.body }}
loaders: |
neoforge
game-versions: |
>=26.2
version-type: ${{ github.event.release.prerelease && 'beta' || 'release' }}
dependencies: |
forgified-fabric-api(required){modrinth:Aqlf1Shp}{curseforge:889079}
luckperms(optional){modrinth:Vebnzrzj}{curseforge:431733}
java: 25
3 changes: 3 additions & 0 deletions Plan/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ plugins {
id "org.sonarqube" version "7.3.1.8318"
id "com.gradleup.shadow" version "9.6.1" apply false
id "net.fabricmc.fabric-loom" version "1.17.17" apply false
id "net.neoforged.moddev" version "2.0.143" apply false
}

apply plugin: "nebula-aggregate-javadocs"
Expand Down Expand Up @@ -105,6 +106,8 @@ subprojects {
maven { url = "https://repo.playeranalytics.net/releases" } // Plan
maven { url = "https://repo.md-5.net/content/repositories/snapshots/" } // RedisBungee
maven { url = "https://jitpack.io" } // RedisBungee fork
maven { url = "https://maven.neoforged.net/releases" } // NeoForge
maven { url = "https://maven.sinytra.org" } // Forgified Fabric API
}

dependencies {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
import net.minecraft.commands.CommandSourceStack;
import net.minecraft.network.chat.Component;
import net.minecraft.server.permissions.Permissions;
import net.playeranalytics.plan.PlanFabric;
import com.djrapitops.plan.PlanPlugin;
import net.playeranalytics.plugin.scheduling.RunnableFactory;

import java.util.concurrent.CompletableFuture;
Expand All @@ -45,10 +45,10 @@ public class FabricCommandManager {
private final CommandDispatcher<CommandSourceStack> dispatcher;
private RunnableFactory runnableFactory;
private LiteralArgumentBuilder<CommandSourceStack> root;
private final PlanFabric plugin;
private final PlanPlugin plugin;
private final ErrorLogger errorLogger;

public FabricCommandManager(CommandDispatcher<CommandSourceStack> dispatcher, PlanFabric plugin, ErrorLogger errorLogger) {
public FabricCommandManager(CommandDispatcher<CommandSourceStack> dispatcher, PlanPlugin plugin, ErrorLogger errorLogger) {
this.dispatcher = dispatcher;
this.plugin = plugin;
this.errorLogger = errorLogger;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@
import com.djrapitops.plan.PlanPlugin;
import com.djrapitops.plan.capability.CapabilitySvc;
import com.djrapitops.plan.gathering.listeners.ListenerSystem;
import net.playeranalytics.plan.PlanFabric;
import net.playeranalytics.plan.gathering.listeners.events.PlanFabricEvents;
import net.playeranalytics.plan.gathering.listeners.fabric.*;
import net.playeranalytics.plugin.server.Listeners;
Expand Down Expand Up @@ -84,7 +83,7 @@ protected void unregisterListeners() {
@Override
public void callEnableEvent(PlanPlugin plugin) {
boolean isEnabled = plugin.isSystemEnabled();
PlanFabricEvents.ON_ENABLE.invoker().onEnable((PlanFabric) plugin);
PlanFabricEvents.ON_ENABLE.invoker().onEnable(plugin);
CapabilitySvc.notifyAboutEnable(isEnabled);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.network.chat.Component;
import net.minecraft.world.level.GameType;
import net.playeranalytics.plan.PlanFabric;
import com.djrapitops.plan.PlanPlugin;
import net.playeranalytics.plan.gathering.FabricPlayerPositionTracker;

import java.net.SocketAddress;
Expand Down Expand Up @@ -99,7 +99,7 @@ public class PlanFabricEvents {
* </ul>
* <p>
* This event provides full access to the Plan instance. However, <strong>it is advised to
* only call {@link PlanFabric#isSystemEnabled} to determine if the enable was successful.</strong>
* only call {@link PlanPlugin#isSystemEnabled} to determine if the enable was successful.</strong>
* It is not guaranteed that this event is called when the plugin fails to enable properly.
*/
public static final Event<OnEnable> ON_ENABLE = EventFactory.createArrayBacked(OnEnable.class, callbacks -> plugin -> {
Expand Down Expand Up @@ -188,6 +188,6 @@ public interface OnClientHandshake {

@FunctionalInterface
public interface OnEnable {
void onEnable(PlanFabric plugin);
void onEnable(PlanPlugin plugin);
}
}
164 changes: 164 additions & 0 deletions Plan/neoforge/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,164 @@
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar

apply plugin: "net.neoforged.moddev"
apply plugin: "com.gradleup.shadow"

ext {
neoVersion = "26.2.0.59"
minecraftVersion = "26.2"
// FFAPI has no 26.2 release yet; 26.1.2 is the stand-in until Sinytra ships 26.2.
ffapiVersion = "0.155.2+26.1.2+3.5.0"
}

configurations {
shade
implementation.extendsFrom shade
}

// Reuse Fabric platform code that is not Fabric-Loader specific.
sourceSets {
main {
java {
srcDir project(":fabric").file("src/main/java")
exclude "net/playeranalytics/plan/PlanFabric.java"
exclude "net/playeranalytics/plan/PlanFabricComponent.java"
exclude "net/playeranalytics/plugin/FabricPlatformLayer.java"
exclude "net/playeranalytics/plugin/FabricPluginInformation.java"
exclude "net/playeranalytics/plan/gathering/FabricSensor.java"
exclude "net/playeranalytics/plan/identification/properties/FabricServerProperties.java"
exclude "net/playeranalytics/plan/modules/fabric/FabricServerPropertiesModule.java"
exclude "net/playeranalytics/plan/modules/fabric/FabricSuperClassBindingModule.java"
exclude "net/playeranalytics/plan/version/FabricVersionChecker.java"
}
resources {
srcDir project(":fabric").file("src/main/resources")
exclude "fabric.mod.json"
}
}
test {
java {
srcDir project(":fabric").file("src/test/java")
exclude "net/playeranalytics/plan/FabricSystemTest.java"
exclude "utilities/mocks/FabricMockComponent.java"
exclude "utilities/mocks/PlanFabricMocker.java"
}
}
}

neoForge {
version = neoVersion

runs {
server {
server()
programArgument "--nogui"
}
configureEach {
logLevel = org.slf4j.event.Level.INFO
}
}

mods {
plan {
sourceSet sourceSets.main
}
}
}

dependencies {
shade project(":common")
shade project(path: ":extensions:adventure", configuration: "shadow")

implementation "net.playeranalytics:platform-abstraction-layer-api:$palVersion"

// Required at runtime; not shaded into PlanNeoForge.jar
implementation "org.sinytra.forgified-fabric-api:forgified-fabric-api:$ffapiVersion"

// Optional permissions API (same package as Fabric); present when a NeoForge port is installed
compileOnly "me.lucko:fabric-permissions-api:0.7.0"

testImplementation(testFixtures(project(":common")))
testImplementation(project(":extensions:adventure"))
}

compileJava {
options.release = 25
}

processResources {
inputs.property "version", fullVersionSemantic
inputs.property "neoVersion", neoVersion
inputs.property "minecraftVersion", minecraftVersion

filesMatching("META-INF/neoforge.mods.toml") {
expand([
"version" : fullVersionSemantic,
"neo_version" : neoVersion,
"minecraft_version": minecraftVersion
])
}
}

tasks.named("shadowJar", ShadowJar) {
configurations = [project.configurations.shade]

exclude "**/*.svg"
exclude "**/*.psd"
exclude "**/*.map"
exclude "LICENSE*.txt"
exclude "jetty-dir.css"

exclude "**/module-info.class"
exclude "module-info.class"
exclude "META-INF/versions/"
exclude "mozilla/**/*"

exclude "org/checkerframework/**/*"
exclude "com/google/common/**/*"
exclude "com/google/thirdparty/**/*"
exclude "com/google/auto/**/*"

exclude "org.javassist:.*"
exclude "org/yaml/**/*"
exclude "nonapi/**/*"
exclude "io/github/classgraph/**/*"
exclude "io/swagger/**/*"
exclude "com/sun/activation/**/*"
exclude "jakarta/activation/**/*"
exclude "jakarta/validation/**/*"
exclude "jakarta/ws/**/*"
exclude "jakarta/xml/**/*"
exclude "javassist/**/*"

relocate("org.apache", "plan.org.apache") {
exclude "org/apache/logging/**"
exclude "org/apache/maven/**"
}

relocate "dagger", "plan.dagger"
relocate "javax.inject", "plan.javax.inject"
relocate "jakarta.inject", "plan.jakarta.inject"

relocate "dev.vankka.dependencydownload", "plan.dev.vankka.dependencydownload"
relocate "com.github.benmanes", "plan.com.github.benmanes"
relocate "com.maxmind", "plan.com.maxmind"
relocate "com.fasterxml", "plan.com.fasterxml"
relocate "com.zaxxer", "plan.com.zaxxer"
relocate "com.google.gson", "plan.com.google.gson"
relocate "com.google.errorprone", "plan.com.google.errorprone"
relocate "org.bstats", "plan.org.bstats"
relocate "org.jasypt", "plan.org.jasypt"
relocate "org.json.simple", "plan.org.json.simple"
relocate "org.slf4j", "plan.org.slf4j"

relocate "org.eclipse.jetty", "plan.org.eclipse.jetty"
relocate "jakarta.servlet", "plan.jakarta.servlet"
relocate "javax.servlet", "plan.javax.servlet"

mergeServiceFiles()

destinationDirectory.set(file("$rootDir/builds/"))
archiveFileName.set("PlanNeoForge-${project.version}.jar")
}

tasks.assemble.dependsOn tasks.shadowJar
Loading
Loading