[FEAT] Expose extra APIs to Command API

This commit is contained in:
2025-01-15 08:21:17 +02:00
parent 8a46899769
commit 74701a7817
32 changed files with 389 additions and 17 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.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;

View File

@@ -1,5 +1,7 @@
package com.hypherionmc.craterlib.nojang.commands;
import com.hypherionmc.craterlib.CraterConstants;
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 +22,25 @@ public class BridgedCommandSourceStack {
internal.sendFailure(ChatUtils.adventureToMojang(text));
}
public boolean isPlayer() {
try {
internal.getPlayerOrException();
return true;
} catch (Exception ignored) {
return false;
}
}
public BridgedPlayer getPlayer() {
try {
return BridgedPlayer.of(internal.getPlayerOrException());
} catch (Exception e) {
CraterConstants.LOG.error("Failed to retrieve player", e);
}
return null;
}
public CommandSourceStack toMojang() {
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.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
));
}
});

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.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;

View File

@@ -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;
}

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.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
));
}
});

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.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;

View File

@@ -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;
}

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.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
));
}
});

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.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;

View File

@@ -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;
}

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.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
));
}
});

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.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;

View File

@@ -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;
}

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.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
));
}
});

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.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;

View File

@@ -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;
}

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.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
));
}
});

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.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;

View File

@@ -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;
}

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.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
));
}
});

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.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;

View File

@@ -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;
}

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.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
));
}
});

View File

@@ -1 +1 @@
5d0ad68c64a0ce008c9169967ba0cb9c10c960b8
4c3cc6b034dd6d3b78254d4cdea18a5634b13cbc

View File

@@ -1,6 +1,6 @@
--- a/Common/src/main/java/com/hypherionmc/craterlib/nojang/client/BridgedMinecraft.java
+++ b/Common/src/main/java/com/hypherionmc/craterlib/nojang/client/BridgedMinecraft.java
@@ -35,7 +35,7 @@
@@ -39,7 +39,7 @@
}
public boolean isRealmServer() {
@@ -9,7 +9,7 @@
}
public boolean isSinglePlayer() {
@@ -59,7 +59,7 @@
@@ -63,7 +63,7 @@
}
public UUID getPlayerId() {

View File

@@ -1,6 +1,13 @@
--- a/Common/src/main/java/com/hypherionmc/craterlib/nojang/commands/BridgedCommandSourceStack.java
+++ b/Common/src/main/java/com/hypherionmc/craterlib/nojang/commands/BridgedCommandSourceStack.java
@@ -13,7 +13,7 @@
@@ -1,5 +1,6 @@
package com.hypherionmc.craterlib.nojang.commands;
+import com.hypherionmc.craterlib.CraterConstants;
import com.hypherionmc.craterlib.nojang.world.entity.player.BridgedPlayer;
import com.hypherionmc.craterlib.utils.ChatUtils;
import lombok.RequiredArgsConstructor;
@@ -14,7 +15,7 @@
private final CommandSourceStack internal;
public void sendSuccess(Supplier<Component> supplier, boolean bl) {
@@ -9,3 +16,28 @@
}
public void sendFailure(Component text) {
@@ -22,11 +23,22 @@
}
public boolean isPlayer() {
- return internal.isPlayer();
+ try {
+ internal.getPlayerOrException();
+ return true;
+ } catch (Exception ignored) {
+ return false;
+ }
}
public BridgedPlayer getPlayer() {
- return BridgedPlayer.of(internal.getPlayer());
+ try {
+ return BridgedPlayer.of(internal.getPlayerOrException());
+ } catch (Exception e) {
+ CraterConstants.LOG.error("Failed to retrieve player", e);
+ }
+
+ return null;
}
public CommandSourceStack toMojang() {

View File

@@ -1,6 +1,6 @@
--- a/Common/src/main/java/com/hypherionmc/craterlib/nojang/client/BridgedMinecraft.java
+++ b/Common/src/main/java/com/hypherionmc/craterlib/nojang/client/BridgedMinecraft.java
@@ -35,7 +35,7 @@
@@ -39,7 +39,7 @@
}
public boolean isRealmServer() {

View File

@@ -1,6 +1,6 @@
--- a/Common/src/main/java/com/hypherionmc/craterlib/nojang/commands/BridgedCommandSourceStack.java
+++ b/Common/src/main/java/com/hypherionmc/craterlib/nojang/commands/BridgedCommandSourceStack.java
@@ -13,7 +13,7 @@
@@ -14,7 +14,7 @@
private final CommandSourceStack internal;
public void sendSuccess(Supplier<Component> supplier, boolean bl) {

View File

@@ -1,6 +1,6 @@
--- a/Common/src/main/java/com/hypherionmc/craterlib/nojang/client/BridgedMinecraft.java
+++ b/Common/src/main/java/com/hypherionmc/craterlib/nojang/client/BridgedMinecraft.java
@@ -35,7 +35,7 @@
@@ -39,7 +39,7 @@
}
public boolean isRealmServer() {

View File

@@ -1,6 +1,6 @@
--- a/Common/src/main/java/com/hypherionmc/craterlib/nojang/commands/BridgedCommandSourceStack.java
+++ b/Common/src/main/java/com/hypherionmc/craterlib/nojang/commands/BridgedCommandSourceStack.java
@@ -13,7 +13,7 @@
@@ -14,7 +14,7 @@
private final CommandSourceStack internal;
public void sendSuccess(Supplier<Component> supplier, boolean bl) {

View File

@@ -1,6 +1,6 @@
--- a/Common/src/main/java/com/hypherionmc/craterlib/nojang/client/BridgedMinecraft.java
+++ b/Common/src/main/java/com/hypherionmc/craterlib/nojang/client/BridgedMinecraft.java
@@ -35,7 +35,7 @@
@@ -39,7 +39,7 @@
}
public boolean isRealmServer() {