From cfd3920c8c9fd99023a96f68cc5ac39a6b2e3199 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Mon, 12 Jun 2023 10:24:49 -0400 Subject: [PATCH 1/3] Add tickable object framework --- .../tickables/LoadableTickableObject.java | 47 +++++++++++++++++++ .../modernfix/tickables/TickableObject.java | 5 ++ .../tickables/TickableObjectManager.java | 18 +++++++ 3 files changed, 70 insertions(+) create mode 100644 common/src/main/java/org/embeddedt/modernfix/tickables/LoadableTickableObject.java create mode 100644 common/src/main/java/org/embeddedt/modernfix/tickables/TickableObject.java create mode 100644 common/src/main/java/org/embeddedt/modernfix/tickables/TickableObjectManager.java 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(); + } + } +} From fcd666383569018c5e33fe1a7abe6037b08c43d7 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Mon, 12 Jun 2023 10:33:40 -0400 Subject: [PATCH 2/3] Move curseforge/modrinth code into common file --- build.gradle | 43 ++++++++++++++++++++++++++++++++++++++++++- fabric/build.gradle | 36 ------------------------------------ forge/build.gradle | 36 ------------------------------------ gradle.properties | 1 + 4 files changed, 43 insertions(+), 73 deletions(-) diff --git a/build.gradle b/build.gradle index a36814b6..266f2f6d 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}" @@ -175,4 +176,44 @@ tasks.register('checkCleanTag') { throw new GradleException('Not a clean tree.') } } +} + +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 + 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) + } } \ No newline at end of file diff --git a/fabric/build.gradle b/fabric/build.gradle index 64ccca13..38437162 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() @@ -95,37 +92,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 4c1502d2..14db4984 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() @@ -121,37 +118,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 715c857e..b5e807ab 100644 --- a/gradle.properties +++ b/gradle.properties @@ -12,6 +12,7 @@ jei_version=7.7.1.153 refined_storage_version=3807951 kubejs_version=1605.3.19-build.299 ctm_version=MC1.16.1-1.1.2.6 +supported_minecraft_versions=1.16.4,1.16.5 fabric_loader_version=0.14.18 fabric_api_version=0.42.0+1.16 From 9c76052be0d9476e745c222c1bc1d24e9f37b785 Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Mon, 12 Jun 2023 10:42:33 -0400 Subject: [PATCH 3/3] Fix CF publishing --- build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index 266f2f6d..b3cb129e 100644 --- a/build.gradle +++ b/build.gradle @@ -189,10 +189,10 @@ configure(subprojects.findAll {it.name == "forge" || it.name == "fabric"}) { apiKey = System.getenv("CURSEFORGE_TOKEN") project { id = "790626" - changelog = file('CHANGELOG.md') + changelog = file('../CHANGELOG.md') changelogType = "markdown" releaseType = isBeta ? "beta" : "release" - addGameVersion project.name + addGameVersion project.name.capitalize() gameVersionStrings.addAll(supported_minecraft_versions.tokenize(",")) mainArtifact remapJar }