From 674abb9196b2ad78fda0107cfc72546a486a3ab8 Mon Sep 17 00:00:00 2001 From: Dion Tryban Date: Sat, 8 Oct 2022 01:25:32 -0400 Subject: [PATCH] Add support for Tips mod on ProgressScreen --- bclib.gradle | 3 ++ gradle.properties | 4 ++- .../org/betterx/bclib/client/BCLibClient.java | 6 ++++ .../betterx/bclib/integration/tips/Tips.java | 24 ++++++++++++++++ .../integration/tips/TipsIntegration.java | 28 +++++++++++++++++++ 5 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/betterx/bclib/integration/tips/Tips.java create mode 100644 src/main/java/org/betterx/bclib/integration/tips/TipsIntegration.java diff --git a/bclib.gradle b/bclib.gradle index 042875ca6..9b4ff9c8f 100644 --- a/bclib.gradle +++ b/bclib.gradle @@ -37,6 +37,9 @@ dependencies { modCompileOnly "dev.emi:emi:${emi_version}" //modImplementation "dev.emi:emi:${emi_version}" + + modImplementation "net.darkhax.tips:Tips-Fabric-${project.tips_version}" + modRuntimeOnly "net.darkhax.bookshelf:Bookshelf-Fabric-${project.bookshelf_version}" } processResources { diff --git a/gradle.properties b/gradle.properties index ab6b1ebac..fb28cf39a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,4 +13,6 @@ maven_group=org.betterx.bclib archives_base_name=bclib # Dependencies modmenu_version=4.0.5 -emi_version=0.3.0+1.19 \ No newline at end of file +emi_version=0.3.0+1.19 +tips_version=1.19.2:8.0.15 +bookshelf_version=1.19.2:16.1.5 \ No newline at end of file diff --git a/src/main/java/org/betterx/bclib/client/BCLibClient.java b/src/main/java/org/betterx/bclib/client/BCLibClient.java index 26f4bae0f..07cca1fe6 100644 --- a/src/main/java/org/betterx/bclib/client/BCLibClient.java +++ b/src/main/java/org/betterx/bclib/client/BCLibClient.java @@ -3,8 +3,11 @@ import org.betterx.bclib.api.v2.ModIntegrationAPI; import org.betterx.bclib.api.v2.PostInitAPI; import org.betterx.bclib.api.v2.dataexchange.DataExchangeAPI; +import org.betterx.bclib.client.gui.screens.ProgressScreen; import org.betterx.bclib.client.models.CustomModelBakery; import org.betterx.bclib.config.Configs; +import org.betterx.bclib.integration.tips.Tips; +import org.betterx.bclib.integration.tips.TipsIntegration; import org.betterx.bclib.registry.BaseBlockEntityRenders; import org.betterx.bclib.registry.PresetsRegistryClient; import org.betterx.worlds.together.WorldsTogether; @@ -24,6 +27,9 @@ public class BCLibClient implements ClientModInitializer, ModelResourceProvider, @Override public void onInitializeClient() { + Tips.addTipsScreen(ProgressScreen.class); + ModIntegrationAPI.register(new TipsIntegration()); + WorldsTogetherClient.onInitializeClient(); ModIntegrationAPI.registerAll(); BaseBlockEntityRenders.register(); diff --git a/src/main/java/org/betterx/bclib/integration/tips/Tips.java b/src/main/java/org/betterx/bclib/integration/tips/Tips.java new file mode 100644 index 000000000..393012908 --- /dev/null +++ b/src/main/java/org/betterx/bclib/integration/tips/Tips.java @@ -0,0 +1,24 @@ +package org.betterx.bclib.integration.tips; + +import net.minecraft.client.gui.screens.Screen; + +import java.util.HashSet; +import java.util.Set; + +/** + * Integration, to provide a custom Screen class for Tips. + *

+ * This integration allows you to use Tips without adding a dependency to your project. If the + * Mod is installed on the Client. + *

+ * You can add a custom screen from your mod by calling {@link #addTipsScreen(Class)}. + *

+ * Your custom screen should be a loading-like screen with space in the bottom left for tips. + */ +public class Tips { + static final Set> screen = new HashSet<>(); + + public static void addTipsScreen(Class scr) { + screen.add(scr); + } +} diff --git a/src/main/java/org/betterx/bclib/integration/tips/TipsIntegration.java b/src/main/java/org/betterx/bclib/integration/tips/TipsIntegration.java new file mode 100644 index 000000000..a7ed3bebe --- /dev/null +++ b/src/main/java/org/betterx/bclib/integration/tips/TipsIntegration.java @@ -0,0 +1,28 @@ +package org.betterx.bclib.integration.tips; + +import net.darkhax.tipsmod.api.TipsAPI; +import net.minecraft.client.gui.screens.Screen; +import org.betterx.bclib.BCLib; +import org.betterx.bclib.integration.ModIntegration; + +/** + * Internal class to use Tips classes, you should not need to use this class. If you want to register a + * Tips Screen for a Mod using BCLib, use {@link Tips#addTipsScreen(Class)} + */ +public class TipsIntegration extends ModIntegration { + public TipsIntegration() { + super("tipsmod"); + } + + @Override + public void init() { + try { + TipsAPI.class.getMethod("registerTipScreen", Class.class); + for (Class screen : Tips.screen) { + TipsAPI.registerTipScreen(screen); + } + } catch (NoSuchMethodException e) { + BCLib.LOGGER.warning("Tips Mod was detected, but doesn't have the right API. Please update Tips."); + } + } +}