1
mirror of https://github.com/Shiewk/BedrockDeathScreen.git synced 2026-04-27 22:44:17 +02:00

Add a config screen to toggle score text

This commit is contained in:
Shy
2025-05-28 18:40:15 +02:00
parent b3a8e14c0d
commit e1b71cb802
10 changed files with 194 additions and 5 deletions
+12
View File
@@ -16,6 +16,17 @@ repositories {
// Loom adds the essential maven repositories to download Minecraft and libraries from automatically.
// See https://docs.gradle.org/current/userguide/declaring_repositories.html
// for more information about repositories.
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
filter {
includeGroup "maven.modrinth"
}
}
}
dependencies {
@@ -26,6 +37,7 @@ dependencies {
// Fabric API. This is technically optional, but you probably want it anyway.
modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"
modImplementation "maven.modrinth:modmenu:14.0.0-rc.2"
}
processResources {
@@ -2,7 +2,7 @@ package de.shiewk.bedrockdeathscreen;
import net.fabricmc.api.ModInitializer;
public class BedrockDeathScreenMod implements ModInitializer {
public final class BedrockDeathScreenMod implements ModInitializer {
@Override
public void onInitialize() {
@@ -1,10 +1,67 @@
package de.shiewk.bedrockdeathscreen.client;
import com.google.gson.Gson;
import de.shiewk.bedrockdeathscreen.config.BedrockDeathScreenConfig;
import net.fabricmc.api.ClientModInitializer;
import net.minecraft.client.MinecraftClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
public final class BedrockDeathScreenClient implements ClientModInitializer {
private static final Logger log = LoggerFactory.getLogger(BedrockDeathScreenClient.class);
private static final Gson gson = new Gson();
private static BedrockDeathScreenConfig config = new BedrockDeathScreenConfig();
private static Path configPath;
public class BedrockDeathScreenClient implements ClientModInitializer {
@Override
public void onInitializeClient() {
MinecraftClient minecraftClient = MinecraftClient.getInstance();
configPath = minecraftClient.runDirectory.toPath().resolve("config/bedrockdeathscreen.json");
try {
loadConfig();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public static void loadConfig() throws IOException {
log.info("Loading config");
if (Files.isRegularFile(configPath)){
try (BufferedReader reader = Files.newBufferedReader(configPath)) {
BedrockDeathScreenConfig loadedConfig = gson.fromJson(reader, BedrockDeathScreenConfig.class);
if (loadedConfig != null) {
config = loadedConfig;
} else {
log.info("Config could not be deserialized, not loading.");
}
}
} else {
log.info("Config file is not a regular file, not loading.");
}
}
public static BedrockDeathScreenConfig getConfig() {
return config;
}
public static void saveConfig() throws IOException {
log.info("Saving config");
Files.createDirectories(configPath.getParent());
if (!Files.isRegularFile(configPath)){
Files.createFile(configPath);
}
try (BufferedWriter writer = Files.newBufferedWriter(configPath, StandardOpenOption.TRUNCATE_EXISTING)) {
gson.toJson(config, writer);
}
}
}
@@ -1,6 +1,8 @@
package de.shiewk.bedrockdeathscreen.client.screen;
import de.shiewk.bedrockdeathscreen.client.BedrockDeathScreenClient;
import de.shiewk.bedrockdeathscreen.client.screen.components.BedrockDeathScreenButton;
import de.shiewk.bedrockdeathscreen.config.BedrockDeathScreenConfig;
import net.minecraft.client.gui.DrawContext;
import net.minecraft.client.gui.screen.DeathScreen;
import net.minecraft.client.gui.screen.MessageScreen;
@@ -21,6 +23,7 @@ public class BedrockDeathScreen extends DeathScreen {
public static final long CURSOR_HAND = GLFW.glfwCreateStandardCursor(GLFW.GLFW_POINTING_HAND_CURSOR);
public static final Identifier VIGNETTE = Identifier.of("bedrockdeathscreen", "textures/gui/death_vignette.png");
private final BedrockDeathScreenConfig config;
private final long screenCreationTime;
private final Text message;
private Text scoreText = Text.empty();
@@ -36,6 +39,7 @@ public class BedrockDeathScreen extends DeathScreen {
public BedrockDeathScreen(@Nullable Text message, boolean isHardcore) {
super(message, isHardcore);
this.config = BedrockDeathScreenClient.getConfig();
this.message = message;
this.hardcore = isHardcore;
screenCreationTime = Util.getMeasuringTimeNano();
@@ -78,11 +82,13 @@ public class BedrockDeathScreen extends DeathScreen {
context.drawCenteredTextWithShadow(this.textRenderer, this.message, this.width / 2, (int) (this.height / 3.5), new Color(255, 255, 255, textOpacity).getRGB());
}
}
if (config.showScore){
final int scoreTextOpacity = (int) Math.min(255, (totalScreenTime - 1250f) / 3f);
if (scoreTextOpacity > 3){
context.drawCenteredTextWithShadow(this.textRenderer, this.scoreText, this.width / 2, (int) (this.height / 3.5) + 12, new Color(255, 255, 255, scoreTextOpacity).getRGB());
}
}
}
if (confirmingExit){
context.drawCenteredTextWithShadow(this.textRenderer, BedrockDeathScreen.confirmQuitText, this.width / 2, this.height - this.height / 3 - 24, new Color(255, 255, 255, 255).getRGB());
@@ -0,0 +1,82 @@
package de.shiewk.bedrockdeathscreen.client.screen;
import de.shiewk.bedrockdeathscreen.client.BedrockDeathScreenClient;
import de.shiewk.bedrockdeathscreen.config.BedrockDeathScreenConfig;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.widget.ButtonWidget;
import net.minecraft.client.gui.widget.GridWidget;
import net.minecraft.client.gui.widget.SimplePositioningWidget;
import net.minecraft.client.gui.widget.TextWidget;
import net.minecraft.text.Text;
import java.io.IOException;
public final class ConfigScreen extends Screen {
private final Screen parent;
private final BedrockDeathScreenConfig config = BedrockDeathScreenClient.getConfig();
private boolean configChanged = false;
public ConfigScreen(Screen parent) {
super(Text.empty());
this.parent = parent;
}
@Override
protected void init() {
addDrawableChild(new TextWidget(
0, 5, width, 9,
Text.translatable("bedrockdeathscreen.config"),
textRenderer
));
addDrawableChild(new ButtonWidget.Builder(
Text.translatable("gui.done"),
button -> this.close()
).position(width / 2 - 75, this.height - 25).build());
GridWidget grid = new GridWidget();
grid.getMainPositioner().margin(4, 4, 4, 4);
final GridWidget.Adder adder = grid.createAdder(2);
adder.add(createButton(
"bedrockdeathscreen.config.showScore",
config.showScore,
button -> {
config.showScore = !config.showScore;
configChanged = true;
button.setMessage(getButtonText("bedrockdeathscreen.config.showScore", config.showScore));
}
));
grid.refreshPositions();
SimplePositioningWidget.setPos(grid, 0, 0, this.width, this.height, 0.5F, 0.5F);
grid.forEachChild(this::addDrawableChild);
}
private Text getButtonText(String translation, boolean state) {
return Text.translatable(
translation,
state ? Text.translatable("gui.yes") : Text.translatable("gui.no")
).withColor(state ? 0x00ff00 : 0xff5555);
}
private ButtonWidget createButton(String translation, boolean state, ButtonWidget.PressAction action) {
return ButtonWidget.builder(
getButtonText(translation, state),
action
).build();
}
@Override
public void close() {
if (configChanged){
try {
BedrockDeathScreenClient.saveConfig();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
assert client != null;
client.setScreen(parent);
}
}
@@ -0,0 +1,7 @@
package de.shiewk.bedrockdeathscreen.config;
public final class BedrockDeathScreenConfig {
public boolean showScore = true;
}
@@ -0,0 +1,14 @@
package de.shiewk.bedrockdeathscreen.config;
import com.terraformersmc.modmenu.api.ConfigScreenFactory;
import com.terraformersmc.modmenu.api.ModMenuApi;
import de.shiewk.bedrockdeathscreen.client.screen.ConfigScreen;
public final class ModMenuConfig implements ModMenuApi {
@Override
public ConfigScreenFactory<?> getModConfigScreenFactory() {
return ConfigScreen::new;
}
}
@@ -0,0 +1,4 @@
{
"bedrockdeathscreen.config": "BedrockDeathScreen-Einstellungen",
"bedrockdeathscreen.config.showScore": "Punktestand anzeigen: %s"
}
@@ -0,0 +1,4 @@
{
"bedrockdeathscreen.config": "BedrockDeathScreen config",
"bedrockdeathscreen.config.showScore": "Show score: %s"
}
+3
View File
@@ -19,6 +19,9 @@
],
"main": [
"de.shiewk.bedrockdeathscreen.BedrockDeathScreenMod"
],
"modmenu": [
"de.shiewk.bedrockdeathscreen.config.ModMenuConfig"
]
},
"mixins": [