[FEAT] Expose extra APIs to Command API

This commit is contained in:
2025-01-15 08:03:08 +02:00
parent 5d0ad68c64
commit 4c3cc6b034
3 changed files with 42 additions and 1 deletions

View File

@@ -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.multiplayer.BridgedServerData;
import com.hypherionmc.craterlib.nojang.client.server.BridgedIntegratedServer; import com.hypherionmc.craterlib.nojang.client.server.BridgedIntegratedServer;
import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer; import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer;
import com.hypherionmc.craterlib.utils.ChatUtils;
import lombok.Getter; import lombok.Getter;
import net.kyori.adventure.text.Component;
import net.minecraft.SharedConstants; import net.minecraft.SharedConstants;
import net.minecraft.client.Minecraft; 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 org.jetbrains.annotations.Nullable;
import java.io.File; import java.io.File;
@@ -78,6 +82,25 @@ public class BridgedMinecraft {
return BridgedIntegratedServer.of(internal.getSingleplayerServer()); 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 () { public int getServerPlayerCount () {
if (internal.getConnection() == null) if (internal.getConnection() == null)
return 0; return 0;

View File

@@ -1,5 +1,6 @@
package com.hypherionmc.craterlib.nojang.commands; package com.hypherionmc.craterlib.nojang.commands;
import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer;
import com.hypherionmc.craterlib.utils.ChatUtils; import com.hypherionmc.craterlib.utils.ChatUtils;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
@@ -20,6 +21,14 @@ public class BridgedCommandSourceStack {
internal.sendFailure(ChatUtils.adventureToMojang(text)); internal.sendFailure(ChatUtils.adventureToMojang(text));
} }
public boolean isPlayer() {
return internal.isPlayer();
}
public BridgedPlayer getPlayer() {
return BridgedPlayer.of(internal.getPlayer());
}
public CommandSourceStack toMojang() { public CommandSourceStack toMojang() {
return internal; return internal;
} }

View File

@@ -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.ClothScreen;
import com.hypherionmc.craterlib.core.config.annotations.NoConfigScreen; import com.hypherionmc.craterlib.core.config.annotations.NoConfigScreen;
import com.hypherionmc.craterlib.core.platform.ModloaderEnvironment; 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.ConfigScreenFactory;
import com.terraformersmc.modmenu.api.ModMenuApi; 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.HashMap;
import java.util.Map; 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"))) { 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)); configScreens.put(config.getModId(), screen -> ClothConfigScreenBuilder.buildConfigScreen(config, screen));
} else { } 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
));
} }
}); });