Skip to content
This repository has been archived by the owner on Oct 14, 2023. It is now read-only.

Commit

Permalink
填充一点文本提示
Browse files Browse the repository at this point in the history
  • Loading branch information
CaaMoe committed Apr 27, 2023
1 parent 7ee2781 commit 9eeddee
Show file tree
Hide file tree
Showing 10 changed files with 116 additions and 58 deletions.
20 changes: 11 additions & 9 deletions src/main/java/moe/caa/fabric/quitconfirm/client/config/Config.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
import moe.caa.fabric.quitconfirm.client.screen.confirm.style.BaseStyle;
import moe.caa.fabric.quitconfirm.client.screen.confirm.style.BedrockStyle;
import moe.caa.fabric.quitconfirm.client.screen.confirm.style.ClassicStyle;
import net.minecraft.text.Text;
import net.minecraft.text.TranslatableTextContent;

import java.io.IOException;
import java.nio.file.Files;
Expand Down Expand Up @@ -85,25 +87,25 @@ public <T extends Enum<T>> T nextEnum(Class<T> tClass, T value) {
}

public enum ConfirmScreenDisplayTypeEnum {
CLASSIC("经典", ClassicStyle::new),
BEDROCK("基岩", BedrockStyle::new);
public final String displayName;
CLASSIC(Text.translatable("config.quitconfirm.screentype.classic"), ClassicStyle::new),
BEDROCK(Text.translatable("config.quitconfirm.screentype.bedrock"), BedrockStyle::new);
public final Text displayName;
public final Supplier<BaseStyle> baseStyleSupplier;

ConfirmScreenDisplayTypeEnum(String displayName, Supplier<BaseStyle> baseStyleSupplier) {
ConfirmScreenDisplayTypeEnum(Text displayName, Supplier<BaseStyle> baseStyleSupplier) {
this.displayName = displayName;
this.baseStyleSupplier = baseStyleSupplier;
}
}


public enum ConfirmTypeEnum {
TOAST("土司"),
SCREEN("屏幕"),
NONE("关闭");
public final String displayName;
TOAST(Text.translatable("config.quitconfirm.confirmtype.toast")),
SCREEN(Text.translatable("config.quitconfirm.confirmtype.screen")),
NONE(Text.translatable("config.quitconfirm.confirmtype.none"));
public final Text displayName;

ConfirmTypeEnum(String displayName) {
ConfirmTypeEnum(Text displayName) {
this.displayName = displayName;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,14 @@
import moe.caa.fabric.quitconfirm.client.event.EventResult;
import moe.caa.fabric.quitconfirm.client.toast.QuitToast;
import net.minecraft.client.MinecraftClient;
import net.minecraft.text.Text;

public class ToastQuitHandler {
private final String message;
private final Text message;
private State state = State.INACTIVE;
private long startTime = 0;

public ToastQuitHandler(String message) {
public ToastQuitHandler(Text message) {
this.message = message;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@

public class QuitConfirm implements ClientModInitializer {
public static final Logger LOGGER = LoggerFactory.getLogger("QuitConfirm");
private final ToastQuitHandler toastInFinalQuitHandler = new ToastQuitHandler("退出这个游戏,请再次操作");
private final ToastQuitHandler toastInSinglePlayerQuitHandle = new ToastQuitHandler("退出单人游戏,请再次操作");
private final ToastQuitHandler toastInMultiplayerQuitHandle = new ToastQuitHandler("退出多人游戏,请再次操作");
private final ToastQuitHandler toastInFinalQuitHandler = new ToastQuitHandler(Text.translatable("toast.quitconfirm.confirm.content.infinal"));
private final ToastQuitHandler toastInSinglePlayerQuitHandle = new ToastQuitHandler(Text.translatable("toast.quitconfirm.confirm.content.insingleplay"));
private final ToastQuitHandler toastInMultiplayerQuitHandle = new ToastQuitHandler(Text.translatable("toast.quitconfirm.confirm.content.inmultiplay"));

@Override
public void onInitializeClient() {
Expand All @@ -29,7 +29,7 @@ public void onInitializeClient() {
return toastInFinalQuitHandler.trigger();
}
if (Config.config.confirmTypeInFinalQuit == Config.ConfirmTypeEnum.SCREEN) {
MinecraftClient.getInstance().setScreen(new ConfirmScreen(MinecraftClient.getInstance().currentScreen, Text.literal("退出这个游戏"), () -> MinecraftClient.getInstance().scheduleStop()));
MinecraftClient.getInstance().setScreen(new ConfirmScreen(MinecraftClient.getInstance().currentScreen, Text.translatable("screen.quitconfirm.confirm.content.infinal"), () -> MinecraftClient.getInstance().scheduleStop()));
return EventResult.CANCEL;
}
return EventResult.PASS;
Expand All @@ -51,7 +51,7 @@ public void onInitializeClient() {
return toastInSinglePlayerQuitHandle.trigger();
}
if (Config.config.confirmTypeInSinglePlayer == Config.ConfirmTypeEnum.SCREEN) {
MinecraftClient.getInstance().setScreen(new ConfirmScreen(MinecraftClient.getInstance().currentScreen, Text.literal("退出单人游戏"), button::onPress));
MinecraftClient.getInstance().setScreen(new ConfirmScreen(MinecraftClient.getInstance().currentScreen, Text.translatable("screen.quitconfirm.confirm.content.insingleplay"), button::onPress));
return EventResult.CANCEL;
}
return EventResult.PASS;
Expand All @@ -61,7 +61,7 @@ public void onInitializeClient() {
return toastInMultiplayerQuitHandle.trigger();
}
if (Config.config.confirmTypeInMultiplayer == Config.ConfirmTypeEnum.SCREEN) {
MinecraftClient.getInstance().setScreen(new ConfirmScreen(MinecraftClient.getInstance().currentScreen, Text.literal("退出多人游戏"), button::onPress));
MinecraftClient.getInstance().setScreen(new ConfirmScreen(MinecraftClient.getInstance().currentScreen, Text.translatable("screen.quitconfirm.confirm.content.inmultiplay"), button::onPress));
return EventResult.CANCEL;
}
return EventResult.PASS;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@

public class ConfirmScreen extends Screen {
private final Text message;
private final ButtonWidget.PressAction onCancel;
private final ButtonWidget.PressAction onConfirm;
private final Runnable onCancel;
private final Runnable onConfirm;
private final long openTime;
private final BaseStyle style = Config.config.confirmScreenDisplayType.baseStyleSupplier.get();
private ButtonWidget cancel;
Expand All @@ -23,15 +23,14 @@ public boolean isConfirmed() {
}

public ConfirmScreen(Screen parentScreen, Text message, Runnable confirm) {
this(parentScreen, message, button -> confirm.run());
}

public ConfirmScreen(Screen parentScreen, Text message, ButtonWidget.PressAction confirm) {
super(Text.literal("你确定?"));
openTime = System.currentTimeMillis();
super(Text.translatable("screen.quitconfirm.confirm.title"));
this.openTime = System.currentTimeMillis();
this.message = message;
onCancel = (buttonWidget) -> this.client.setScreen(parentScreen);
onConfirm = confirm;
this.onCancel = () -> this.client.setScreen(parentScreen);
this.onConfirm = () -> {
confirmed = true;
confirm.run();
};
}

@Override
Expand All @@ -50,10 +49,10 @@ public void tick() {
private void initButton() {
confirm = style.generateConfirmButtons(this, button -> {
confirmed = true;
confirm.onPress();
onConfirm.run();
});

cancel = style.generateCancelButtons(this, onCancel);
cancel = style.generateCancelButtons(this, button -> onCancel.run());

confirm.active = false;
cancel.active = false;
Expand All @@ -70,7 +69,7 @@ public void render(MatrixStack matrices, int mouseX, int mouseY, float delta) {
@Override
public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
if (Config.config.enableScreenShortcutKey && keyCode == 257 /* ENTER */) {
onConfirm.onPress(confirm);
onConfirm.run();
}
return super.keyPressed(keyCode, scanCode, modifiers);
}
Expand All @@ -79,4 +78,9 @@ public boolean keyPressed(int keyCode, int scanCode, int modifiers) {
public boolean shouldCloseOnEsc() {
return Config.config.enableScreenShortcutKey;
}

@Override
public void close() {
onCancel.run();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public class SettingScreen extends Screen {
private ButtonWidget back;

public SettingScreen(Screen screen) {
super(Text.literal("设置"));
super(Text.translatable("config.quitconfirm.setting.title"));
parentScreen = screen;
}

Expand All @@ -31,50 +31,50 @@ protected void init() {

SettingElementListWidget listWidget = new SettingElementListWidget(this.client, this.width, this.height, 30 /* 上边距 */, height - 40/* 下边距 */, 24);
{
MutableText category = Text.literal("设置退出二次确认的方式");
MutableText category = Text.translatable("config.quitconfirm.setting.confirmtype.category");
listWidget.addEntry(listWidget.new CategoryEntry(category.setStyle(category.getStyle().withBold(true)), 11184810));

listWidget.addEntry(listWidget.new ButtonListEntry(ButtonWidget
.builder(Text.literal(Config.config.confirmTypeInFinalQuit.displayName), (button) -> {
.builder(Config.config.confirmTypeInFinalQuit.displayName, (button) -> {
Config.config.confirmTypeInFinalQuit = Config.config.nextEnum(Config.ConfirmTypeEnum.class, Config.config.confirmTypeInFinalQuit);
button.setMessage(Text.literal(Config.config.confirmTypeInFinalQuit.displayName));
button.setMessage((Config.config.confirmTypeInFinalQuit.displayName));
})
.dimensions(0, 0, 40, 20).build(), Text.literal("关闭游戏窗口时的确认方式")));
.dimensions(0, 0, 50, 20).build(), Text.translatable("config.quitconfirm.setting.confirmtype.infinal")));

listWidget.addEntry(listWidget.new ButtonListEntry(ButtonWidget
.builder(Text.literal(Config.config.confirmTypeInSinglePlayer.displayName), (button) -> {
.builder((Config.config.confirmTypeInSinglePlayer.displayName), (button) -> {
Config.config.confirmTypeInSinglePlayer = Config.config.nextEnum(Config.ConfirmTypeEnum.class, Config.config.confirmTypeInSinglePlayer);
button.setMessage(Text.literal(Config.config.confirmTypeInSinglePlayer.displayName));
button.setMessage((Config.config.confirmTypeInSinglePlayer.displayName));
})
.dimensions(0, 0, 40, 20).build(), Text.literal("退出单人游戏时的确认方式")));
.dimensions(0, 0, 50, 20).build(), Text.translatable("config.quitconfirm.setting.confirmtype.insingleplayer")));

listWidget.addEntry(listWidget.new ButtonListEntry(ButtonWidget
.builder(Text.literal(Config.config.confirmTypeInMultiplayer.displayName), (button) -> {
.builder((Config.config.confirmTypeInMultiplayer.displayName), (button) -> {
Config.config.confirmTypeInMultiplayer = Config.config.nextEnum(Config.ConfirmTypeEnum.class, Config.config.confirmTypeInMultiplayer);
button.setMessage(Text.literal(Config.config.confirmTypeInMultiplayer.displayName));
button.setMessage((Config.config.confirmTypeInMultiplayer.displayName));
})
.dimensions(0, 0, 40, 20).build(), Text.literal("退出多人游戏时的确认方式")));
.dimensions(0, 0, 50, 20).build(), Text.translatable("config.quitconfirm.setting.confirmtype.inmultiplayer")));
}
{
MutableText category = Text.literal("二次确认界面屏幕设定");
listWidget.addEntry(listWidget.new CategoryEntry(category.setStyle(category.getStyle().withBold(true)), 11184810));

listWidget.addEntry(listWidget.new ButtonListEntry(ButtonWidget
.builder(Text.literal(Config.config.confirmScreenDisplayType.displayName), (button) -> {
.builder((Config.config.confirmScreenDisplayType.displayName), (button) -> {
Config.config.confirmScreenDisplayType = Config.config.nextEnum(Config.ConfirmScreenDisplayTypeEnum.class, Config.config.confirmScreenDisplayType);
button.setMessage(Text.literal(Config.config.confirmScreenDisplayType.displayName));
button.setMessage((Config.config.confirmScreenDisplayType.displayName));
})
.dimensions(0, 0, 40, 20).build(), Text.literal("确认屏幕样式")));
.dimensions(0, 0, 50, 20).build(), Text.literal("确认屏幕样式")));


listWidget.addEntry(listWidget.new ButtonListEntry(ButtonWidget
.builder(Config.config.enableScreenShortcutKey ? ScreenTexts.ON : ScreenTexts.OFF, (button) -> {
Config.config.enableScreenShortcutKey = !Config.config.enableScreenShortcutKey;
button.setMessage(Config.config.enableScreenShortcutKey ? ScreenTexts.ON : ScreenTexts.OFF);
})
.dimensions(0, 0, 40, 20).build(), Text.literal("允许在二次确认屏幕上使用快捷键")));
.dimensions(0, 0, 50, 20).build(), Text.literal("允许在二次确认屏幕上使用快捷键")));

TextFieldWidget keepDark = new TextFieldWidget(client.textRenderer, 0, 0, 38, 20, Text.empty());
TextFieldWidget keepDark = new TextFieldWidget(client.textRenderer, 0, 0, 48, 20, Text.empty());
keepDark.setText(String.valueOf(Config.config.keepDarkInConfirmScreenTime));
keepDark.setChangedListener(new PositiveLongParser(keepDark, (it) -> Config.config.keepDarkInConfirmScreenTime = it));
listWidget.addEntry(listWidget.new InputListEntry(keepDark, Text.literal("保持确认屏幕按钮不可用时长")));
Expand All @@ -83,17 +83,17 @@ protected void init() {
MutableText category = Text.literal("二次确认土司设定");
listWidget.addEntry(listWidget.new CategoryEntry(category.setStyle(category.getStyle().withBold(true)), 11184810));

TextFieldWidget toastDisplayTime = new TextFieldWidget(client.textRenderer, 0, 0, 38, 20, Text.empty());
TextFieldWidget toastDisplayTime = new TextFieldWidget(client.textRenderer, 0, 0, 48, 20, Text.empty());
toastDisplayTime.setText(String.valueOf(Config.config.toastConfirmDisplayTime));
toastDisplayTime.setChangedListener(new PositiveLongParser(toastDisplayTime, (it) -> Config.config.toastConfirmDisplayTime = it));
listWidget.addEntry(listWidget.new InputListEntry(toastDisplayTime, Text.literal("土司持续时间")));

TextFieldWidget toastStartAliveTime = new TextFieldWidget(client.textRenderer, 0, 0, 38, 20, Text.empty());
TextFieldWidget toastStartAliveTime = new TextFieldWidget(client.textRenderer, 0, 0, 48, 20, Text.empty());
toastStartAliveTime.setText(String.valueOf(Config.config.toastConfirmStartAliveTime));
toastStartAliveTime.setChangedListener(new PositiveLongParser(toastStartAliveTime, (it) -> Config.config.toastConfirmStartAliveTime = it));
listWidget.addEntry(listWidget.new InputListEntry(toastStartAliveTime, Text.literal("土司响应开始时间")));

TextFieldWidget toastEndAliveTime = new TextFieldWidget(client.textRenderer, 0, 0, 38, 20, Text.empty());
TextFieldWidget toastEndAliveTime = new TextFieldWidget(client.textRenderer, 0, 0, 48, 20, Text.empty());
toastEndAliveTime.setText(String.valueOf(Config.config.toastConfirmEndAliveTime));
toastEndAliveTime.setChangedListener(new PositiveLongParser(toastEndAliveTime, (it) -> Config.config.toastConfirmEndAliveTime = it));
listWidget.addEntry(listWidget.new InputListEntry(toastEndAliveTime, Text.literal("土司响应结束时间")));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,16 @@
import net.minecraft.client.toast.Toast;
import net.minecraft.client.toast.ToastManager;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.text.Text;
import net.minecraft.util.Identifier;

public abstract class BaseToast implements Toast {
protected static final Identifier texture = new Identifier("quitconfirm", "textures/gui/toasts.png");
protected final String title;
protected final String message;
protected final Text title;
protected final Text message;
protected final long keepTime;

protected BaseToast(String title, String message, long keepTime) {
protected BaseToast(Text title, Text message, long keepTime) {
this.title = title;
this.message = message;
this.keepTime = keepTime;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,17 +9,27 @@
import java.awt.*;

public class QuitToast extends BaseToast {
public QuitToast(String message, long keepTime) {
super("退出提醒", message, keepTime);
public QuitToast(Text message, long keepTime) {
super(Text.translatable("toast.quitconfirm.confirm.title"), message, keepTime);
}

@Override
public int getWidth() {
return 241;
}

@Override
public int getHeight() {
return 32;
}

@Override
protected void drawToast(MatrixStack matrices, ToastManager manager) {
RenderSystem.setShaderTexture(0, texture);
RenderSystem.setShaderColor(1.0f, 1.0f, 1.0f, 1.0f);
DrawableHelper.drawTexture(matrices, 0, 0, 0, 0, 160, 32);
DrawableHelper.drawTexture(matrices, 8, 0, 241, 0, 15, 30);
manager.getClient().textRenderer.drawWithShadow(matrices, Text.literal(title), 35.0f, 7.0f, Color.WHITE.getRGB());
manager.getClient().textRenderer.drawWithShadow(matrices, Text.literal(message), 35.0f, 18.0f, Color.WHITE.getRGB());
DrawableHelper.drawTexture(matrices, 0, 0, 0, 0, getWidth(), getHeight());
DrawableHelper.drawTexture(matrices, 8, 0, 242, 0, 15, 30);
manager.getClient().textRenderer.drawWithShadow(matrices, (title), 35.0f, 7.0f, Color.WHITE.getRGB());
manager.getClient().textRenderer.drawWithShadow(matrices, (message), 35.0f, 18.0f, Color.WHITE.getRGB());
}
}
20 changes: 20 additions & 0 deletions src/main/resources/assets/quitconfirm/lang/en_us.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"toast.quitconfirm.confirm.title": "Exit secondary confirmation.",
"toast.quitconfirm.confirm.content.infinal": "Close the game, please try again.",
"toast.quitconfirm.confirm.content.insingleplay": "Exit single player game, please try again.",
"toast.quitconfirm.confirm.content.inmultiplay": "Exit multi player game, please try again.",
"screen.quitconfirm.confirm.title": "Are you sure?",
"screen.quitconfirm.confirm.content.infinal": "Close the game.",
"screen.quitconfirm.confirm.content.insingleplay": "Exit single player game.",
"screen.quitconfirm.confirm.content.inmultiplay": "Exit multi player game.",
"config.quitconfirm.confirmtype.toast": "Toast",
"config.quitconfirm.confirmtype.screen": "Screen",
"config.quitconfirm.confirmtype.none": "Disable",
"config.quitconfirm.screentype.classic": "Classic",
"config.quitconfirm.screentype.bedrock": "Bedrock",
"config.quitconfirm.setting.title": "Settings",
"config.quitconfirm.setting.confirmtype.category": "Set the secondary confirmation method.",
"config.quitconfirm.setting.confirmtype.infinal": "When closing the window.",
"config.quitconfirm.setting.confirmtype.inmultiplayer": "When exiting a multiplayer game.",
"config.quitconfirm.setting.confirmtype.insingleplayer": "When exiting a single player game."
}
Loading

0 comments on commit 9eeddee

Please sign in to comment.