diff --git a/build.gradle b/build.gradle index cb78581f..0ec85c63 100644 --- a/build.gradle +++ b/build.gradle @@ -4,6 +4,7 @@ plugins { id "maven-publish" id 'com.matthewprenger.cursegradle' version '1.4.0' apply false id 'com.palantir.git-version' version '1.0.0' + id 'org.ajoberstar.grgit' version '5.2.0' id 'se.bjurr.gitchangelog.git-changelog-gradle-plugin' version '1.79.0' id "com.modrinth.minotaur" version "2.+" apply false id("com.diffplug.spotless") version "6.18.0" apply false @@ -35,7 +36,7 @@ allprojects { plusIndex = details.lastTag.length() } def baseVersion = details.lastTag.substring(0, plusIndex) - def dirtyMarker = details.isCleanTag ? "" : ".dirty" + def dirtyMarker = grgit.status().clean ? "" : ".dirty" def commitHashMarker = details.commitDistance > 0 ? ("." + details.gitHash) : "" def preMarker = (details.commitDistance > 0 || !details.isCleanTag) ? ("-beta." + details.commitDistance) : "" def versionString = "${baseVersion}${preMarker}+mc${minecraft_version}${commitHashMarker}${dirtyMarker}" @@ -184,3 +185,43 @@ tasks.register('checkCleanTag') { } } } + +configure(subprojects.findAll {it.name == "forge" || it.name == "fabric"}) { + apply plugin: 'com.matthewprenger.cursegradle' + apply plugin: 'com.modrinth.minotaur' + + def isBeta = project.version.toString().contains("beta") + + curseforge { + if (System.getenv("CURSEFORGE_TOKEN") != null) { + apiKey = System.getenv("CURSEFORGE_TOKEN") + project { + id = "790626" + changelog = file('../CHANGELOG.md') + changelogType = "markdown" + releaseType = isBeta ? "beta" : "release" + addGameVersion project.name.capitalize() + gameVersionStrings.addAll(supported_minecraft_versions.tokenize(",")) + mainArtifact remapJar + } + } + } + + modrinth { + token = System.getenv("MODRINTH_TOKEN") + projectId = "modernfix" // This can be the project ID or the slug. Either will work! + versionType = isBeta ? "beta" : "release" // This is the default -- can also be `beta` or `alpha` + uploadFile = remapJar + gameVersions = supported_minecraft_versions.tokenize(",") + loaders = [project.name] + changelog.set(provider { file("CHANGELOG.md").getText('UTF-8') }) + } + + tasks.curseforge.dependsOn(rootProject.generateChangelog) + tasks.modrinth.dependsOn(rootProject.generateChangelog) + + tasks.register('publishToModSites') { + publishToModSites.dependsOn(tasks.modrinth) + publishToModSites.dependsOn(tasks.curseforge) + } +} diff --git a/common/src/main/java/org/embeddedt/modernfix/tickables/LoadableTickableObject.java b/common/src/main/java/org/embeddedt/modernfix/tickables/LoadableTickableObject.java new file mode 100644 index 00000000..8cb32cd5 --- /dev/null +++ b/common/src/main/java/org/embeddedt/modernfix/tickables/LoadableTickableObject.java @@ -0,0 +1,47 @@ +package org.embeddedt.modernfix.tickables; + +import org.jetbrains.annotations.Nullable; + +import java.util.function.Consumer; +import java.util.function.Supplier; + +public class LoadableTickableObject implements TickableObject { + private volatile int ticksInactive = 0; + private final int timeout; + private final Supplier loader; + private final Consumer finalizer; + private volatile T theObject = null; + + public LoadableTickableObject(int timeout, Supplier loader, Consumer finalizer) { + this(timeout, loader, finalizer, null); + } + + public LoadableTickableObject(int timeout, Supplier loader, Consumer finalizer, @Nullable T initialValue) { + this.timeout = timeout; + this.loader = loader; + this.finalizer = finalizer; + this.theObject = initialValue; + } + + public T get() { + synchronized (this) { + ticksInactive++; + T obj = theObject; + if(obj == null) { + obj = loader.get(); + theObject = obj; + } + return obj; + } + } + + public final void tick() { + synchronized (this) { + ticksInactive++; + if(ticksInactive >= this.timeout) { + finalizer.accept(theObject); + theObject = null; + } + } + } +} diff --git a/common/src/main/java/org/embeddedt/modernfix/tickables/TickableObject.java b/common/src/main/java/org/embeddedt/modernfix/tickables/TickableObject.java new file mode 100644 index 00000000..cc31c47f --- /dev/null +++ b/common/src/main/java/org/embeddedt/modernfix/tickables/TickableObject.java @@ -0,0 +1,5 @@ +package org.embeddedt.modernfix.tickables; + +public interface TickableObject { + void tick(); +} diff --git a/common/src/main/java/org/embeddedt/modernfix/tickables/TickableObjectManager.java b/common/src/main/java/org/embeddedt/modernfix/tickables/TickableObjectManager.java new file mode 100644 index 00000000..4ec5f8e8 --- /dev/null +++ b/common/src/main/java/org/embeddedt/modernfix/tickables/TickableObjectManager.java @@ -0,0 +1,18 @@ +package org.embeddedt.modernfix.tickables; + +import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; + +public class TickableObjectManager { + private static final List TICKABLE_OBJECT_LIST = new CopyOnWriteArrayList<>(); + + public static void register(TickableObject object) { + TICKABLE_OBJECT_LIST.add(object); + } + + public static void runTick() { + for(TickableObject o : TICKABLE_OBJECT_LIST) { + o.tick(); + } + } +} diff --git a/fabric/build.gradle b/fabric/build.gradle index 3317c721..debe5cfe 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -2,9 +2,6 @@ plugins { id "com.github.johnrengelman.shadow" version "7.1.2" } -apply plugin: 'com.matthewprenger.cursegradle' -apply plugin: 'com.modrinth.minotaur' - architectury { platformSetupLoomIde() fabric() @@ -96,37 +93,4 @@ publishing { repositories { // Add repositories to publish to here. } -} - -curseforge { - if (System.getenv("CURSEFORGE_TOKEN") != null) { - apiKey = System.getenv("CURSEFORGE_TOKEN") - project { - id = "790626" - changelog = file('../CHANGELOG.md') - changelogType = "markdown" - releaseType = "beta" - addGameVersion "Fabric" - addGameVersion minecraft_version - mainArtifact remapJar - } - } -} - -modrinth { - token = System.getenv("MODRINTH_TOKEN") - projectId = "modernfix" // This can be the project ID or the slug. Either will work! - versionType = "beta" // This is the default -- can also be `beta` or `alpha` - uploadFile = remapJar - gameVersions = [minecraft_version] - loaders = ["fabric"] - changelog.set(provider { file("../CHANGELOG.md").getText('UTF-8') }) -} - -tasks.curseforge.dependsOn(rootProject.generateChangelog) -tasks.modrinth.dependsOn(rootProject.generateChangelog) - -tasks.register('publishToModSites') { - publishToModSites.dependsOn(tasks.modrinth) - publishToModSites.dependsOn(tasks.curseforge) } \ No newline at end of file diff --git a/forge/build.gradle b/forge/build.gradle index 650783d7..8ca02ef6 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -2,9 +2,6 @@ plugins { id "com.github.johnrengelman.shadow" version "7.1.2" } -apply plugin: 'com.matthewprenger.cursegradle' -apply plugin: 'com.modrinth.minotaur' - architectury { platformSetupLoomIde() forge() @@ -114,37 +111,4 @@ publishing { repositories { // Add repositories to publish to here. } -} - -curseforge { - if (System.getenv("CURSEFORGE_TOKEN") != null) { - apiKey = System.getenv("CURSEFORGE_TOKEN") - project { - id = "790626" - changelog = file('../CHANGELOG.md') - changelogType = "markdown" - releaseType = "release" - addGameVersion "Forge" - addGameVersion minecraft_version - mainArtifact remapJar - } - } -} - -modrinth { - token = System.getenv("MODRINTH_TOKEN") - projectId = "modernfix" // This can be the project ID or the slug. Either will work! - versionType = "release" // This is the default -- can also be `beta` or `alpha` - uploadFile = remapJar - gameVersions = [minecraft_version] - loaders = ["forge"] - changelog.set(provider { file("../CHANGELOG.md").getText('UTF-8') }) -} - -tasks.curseforge.dependsOn(rootProject.generateChangelog) -tasks.modrinth.dependsOn(rootProject.generateChangelog) - -tasks.register('publishToModSites') { - publishToModSites.dependsOn(tasks.modrinth) - publishToModSites.dependsOn(tasks.curseforge) } \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 1b7c7558..75d18be7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -12,6 +12,7 @@ rei_version=11.0.597 ctm_version=1.19.2-1.1.7+11 kubejs_version=1902.6.0-build.142 rhino_version=1902.2.2-build.268 +supported_minecraft_versions=1.19.4 fabric_loader_version=0.14.19 fabric_api_version=0.80.0+1.19.4