From 4c3cc6b034dd6d3b78254d4cdea18a5634b13cbc Mon Sep 17 00:00:00 2001 From: hypherionmc Date: Wed, 15 Jan 2025 08:03:08 +0200 Subject: [PATCH] [FEAT] Expose extra APIs to Command API --- .../nojang/client/BridgedMinecraft.java | 23 +++++++++++++++++++ .../commands/BridgedCommandSourceStack.java | 9 ++++++++ .../CraterLibModMenuIntegration.java | 11 ++++++++- 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/Common/src/main/java/com/hypherionmc/craterlib/nojang/client/BridgedMinecraft.java b/Common/src/main/java/com/hypherionmc/craterlib/nojang/client/BridgedMinecraft.java index 57db3f9..8d19139 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/nojang/client/BridgedMinecraft.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/nojang/client/BridgedMinecraft.java @@ -4,9 +4,13 @@ import com.hypherionmc.craterlib.nojang.client.multiplayer.BridgedClientLevel; import com.hypherionmc.craterlib.nojang.client.multiplayer.BridgedServerData; import com.hypherionmc.craterlib.nojang.client.server.BridgedIntegratedServer; import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; +import com.hypherionmc.craterlib.utils.ChatUtils; import lombok.Getter; +import net.kyori.adventure.text.Component; import net.minecraft.SharedConstants; import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screens.AlertScreen; +import net.minecraft.client.gui.screens.Screen; import org.jetbrains.annotations.Nullable; import java.io.File; @@ -78,6 +82,25 @@ public class BridgedMinecraft { return BridgedIntegratedServer.of(internal.getSingleplayerServer()); } + public void showWarningScreen(Component title, Component message) { + Screen currentScreen = internal.screen; + internal.setScreen( + new AlertScreen( + () -> internal.setScreen(currentScreen), + ChatUtils.adventureToMojang(title), + ChatUtils.adventureToMojang(message) + ) + ); + } + + public Screen buildWarningScreen(Component title, Component message, Screen parent) { + return new AlertScreen( + () -> internal.setScreen(parent), + ChatUtils.adventureToMojang(title), + ChatUtils.adventureToMojang(message) + ); + } + public int getServerPlayerCount () { if (internal.getConnection() == null) return 0; diff --git a/Common/src/main/java/com/hypherionmc/craterlib/nojang/commands/BridgedCommandSourceStack.java b/Common/src/main/java/com/hypherionmc/craterlib/nojang/commands/BridgedCommandSourceStack.java index 5529824..d10b151 100644 --- a/Common/src/main/java/com/hypherionmc/craterlib/nojang/commands/BridgedCommandSourceStack.java +++ b/Common/src/main/java/com/hypherionmc/craterlib/nojang/commands/BridgedCommandSourceStack.java @@ -1,5 +1,6 @@ package com.hypherionmc.craterlib.nojang.commands; +import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; import com.hypherionmc.craterlib.utils.ChatUtils; import lombok.RequiredArgsConstructor; import net.kyori.adventure.text.Component; @@ -20,6 +21,14 @@ public class BridgedCommandSourceStack { internal.sendFailure(ChatUtils.adventureToMojang(text)); } + public boolean isPlayer() { + return internal.isPlayer(); + } + + public BridgedPlayer getPlayer() { + return BridgedPlayer.of(internal.getPlayer()); + } + public CommandSourceStack toMojang() { return internal; } diff --git a/Fabric/src/main/java/com/hypherionmc/craterlib/CraterLibModMenuIntegration.java b/Fabric/src/main/java/com/hypherionmc/craterlib/CraterLibModMenuIntegration.java index b4f4429..b93256c 100644 --- a/Fabric/src/main/java/com/hypherionmc/craterlib/CraterLibModMenuIntegration.java +++ b/Fabric/src/main/java/com/hypherionmc/craterlib/CraterLibModMenuIntegration.java @@ -7,8 +7,13 @@ import com.hypherionmc.craterlib.core.config.ConfigController; import com.hypherionmc.craterlib.core.config.annotations.ClothScreen; import com.hypherionmc.craterlib.core.config.annotations.NoConfigScreen; import com.hypherionmc.craterlib.core.platform.ModloaderEnvironment; +import com.hypherionmc.craterlib.nojang.client.BridgedMinecraft; import com.terraformersmc.modmenu.api.ConfigScreenFactory; import com.terraformersmc.modmenu.api.ModMenuApi; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import net.kyori.adventure.text.format.Style; +import net.kyori.adventure.text.format.TextDecoration; import java.util.HashMap; import java.util.Map; @@ -30,7 +35,11 @@ public class CraterLibModMenuIntegration implements ModMenuApi { if (watcher.getLeft().getClass().isAnnotationPresent(ClothScreen.class) && (ModloaderEnvironment.INSTANCE.isModLoaded("cloth_config") || ModloaderEnvironment.INSTANCE.isModLoaded("cloth-config") || ModloaderEnvironment.INSTANCE.isModLoaded("clothconfig"))) { configScreens.put(config.getModId(), screen -> ClothConfigScreenBuilder.buildConfigScreen(config, screen)); } else { - //configScreens.put(config.getModId(), screen -> new CraterConfigScreen(config, screen)); + configScreens.put(config.getModId(), screen -> BridgedMinecraft.getInstance().buildWarningScreen( + Component.text("Notice").style(Style.style(NamedTextColor.YELLOW).decorate(TextDecoration.BOLD)), + Component.text("This mod does not have a config screen, or Cloth Config is not installed"), + screen + )); } });