From 9eeddee4708b349ff6141741ee7a765741e6e2df Mon Sep 17 00:00:00 2001 From: CaaMoe Date: Thu, 27 Apr 2023 19:26:19 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A1=AB=E5=85=85=E4=B8=80=E7=82=B9=E6=96=87?= =?UTF-8?q?=E6=9C=AC=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../quitconfirm/client/config/Config.java | 20 ++++----- .../client/handle/ToastQuitHandler.java | 5 ++- .../quitconfirm/client/main/QuitConfirm.java | 12 +++--- .../client/screen/confirm/ConfirmScreen.java | 30 ++++++++------ .../client/screen/setting/SettingScreen.java | 38 +++++++++--------- .../quitconfirm/client/toast/BaseToast.java | 7 ++-- .../quitconfirm/client/toast/QuitToast.java | 22 +++++++--- .../assets/quitconfirm/lang/en_us.json | 20 +++++++++ .../assets/quitconfirm/lang/zh_cn.json | 20 +++++++++ .../quitconfirm/textures/gui/toasts.png | Bin 1032 -> 855 bytes 10 files changed, 116 insertions(+), 58 deletions(-) create mode 100644 src/main/resources/assets/quitconfirm/lang/en_us.json create mode 100644 src/main/resources/assets/quitconfirm/lang/zh_cn.json diff --git a/src/main/java/moe/caa/fabric/quitconfirm/client/config/Config.java b/src/main/java/moe/caa/fabric/quitconfirm/client/config/Config.java index 82e1a0a..f2094e4 100644 --- a/src/main/java/moe/caa/fabric/quitconfirm/client/config/Config.java +++ b/src/main/java/moe/caa/fabric/quitconfirm/client/config/Config.java @@ -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; @@ -85,12 +87,12 @@ public > T nextEnum(Class 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 baseStyleSupplier; - ConfirmScreenDisplayTypeEnum(String displayName, Supplier baseStyleSupplier) { + ConfirmScreenDisplayTypeEnum(Text displayName, Supplier baseStyleSupplier) { this.displayName = displayName; this.baseStyleSupplier = baseStyleSupplier; } @@ -98,12 +100,12 @@ public enum ConfirmScreenDisplayTypeEnum { 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; } } diff --git a/src/main/java/moe/caa/fabric/quitconfirm/client/handle/ToastQuitHandler.java b/src/main/java/moe/caa/fabric/quitconfirm/client/handle/ToastQuitHandler.java index d3803e3..9d821cf 100644 --- a/src/main/java/moe/caa/fabric/quitconfirm/client/handle/ToastQuitHandler.java +++ b/src/main/java/moe/caa/fabric/quitconfirm/client/handle/ToastQuitHandler.java @@ -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; } diff --git a/src/main/java/moe/caa/fabric/quitconfirm/client/main/QuitConfirm.java b/src/main/java/moe/caa/fabric/quitconfirm/client/main/QuitConfirm.java index ed667bf..42cbd09 100644 --- a/src/main/java/moe/caa/fabric/quitconfirm/client/main/QuitConfirm.java +++ b/src/main/java/moe/caa/fabric/quitconfirm/client/main/QuitConfirm.java @@ -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() { @@ -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; @@ -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; @@ -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; diff --git a/src/main/java/moe/caa/fabric/quitconfirm/client/screen/confirm/ConfirmScreen.java b/src/main/java/moe/caa/fabric/quitconfirm/client/screen/confirm/ConfirmScreen.java index 3ebccd3..3f34ad4 100644 --- a/src/main/java/moe/caa/fabric/quitconfirm/client/screen/confirm/ConfirmScreen.java +++ b/src/main/java/moe/caa/fabric/quitconfirm/client/screen/confirm/ConfirmScreen.java @@ -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; @@ -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 @@ -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; @@ -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); } @@ -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(); + } } \ No newline at end of file diff --git a/src/main/java/moe/caa/fabric/quitconfirm/client/screen/setting/SettingScreen.java b/src/main/java/moe/caa/fabric/quitconfirm/client/screen/setting/SettingScreen.java index e25fa60..1fbd6b4 100644 --- a/src/main/java/moe/caa/fabric/quitconfirm/client/screen/setting/SettingScreen.java +++ b/src/main/java/moe/caa/fabric/quitconfirm/client/screen/setting/SettingScreen.java @@ -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; } @@ -31,40 +31,40 @@ 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 @@ -72,9 +72,9 @@ protected void init() { 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("保持确认屏幕按钮不可用时长"))); @@ -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("土司响应结束时间"))); diff --git a/src/main/java/moe/caa/fabric/quitconfirm/client/toast/BaseToast.java b/src/main/java/moe/caa/fabric/quitconfirm/client/toast/BaseToast.java index abf5d22..0075b32 100644 --- a/src/main/java/moe/caa/fabric/quitconfirm/client/toast/BaseToast.java +++ b/src/main/java/moe/caa/fabric/quitconfirm/client/toast/BaseToast.java @@ -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; diff --git a/src/main/java/moe/caa/fabric/quitconfirm/client/toast/QuitToast.java b/src/main/java/moe/caa/fabric/quitconfirm/client/toast/QuitToast.java index 0c77f19..5516c11 100644 --- a/src/main/java/moe/caa/fabric/quitconfirm/client/toast/QuitToast.java +++ b/src/main/java/moe/caa/fabric/quitconfirm/client/toast/QuitToast.java @@ -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()); } } diff --git a/src/main/resources/assets/quitconfirm/lang/en_us.json b/src/main/resources/assets/quitconfirm/lang/en_us.json new file mode 100644 index 0000000..9de499e --- /dev/null +++ b/src/main/resources/assets/quitconfirm/lang/en_us.json @@ -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." +} \ No newline at end of file diff --git a/src/main/resources/assets/quitconfirm/lang/zh_cn.json b/src/main/resources/assets/quitconfirm/lang/zh_cn.json new file mode 100644 index 0000000..3608cc4 --- /dev/null +++ b/src/main/resources/assets/quitconfirm/lang/zh_cn.json @@ -0,0 +1,20 @@ +{ + "config.quitconfirm.confirmtype.toast": "土司", + "config.quitconfirm.confirmtype.screen": "屏幕", + "config.quitconfirm.confirmtype.none": "关", + "config.quitconfirm.screentype.classic": "经典", + "config.quitconfirm.screentype.bedrock": "基岩", + "config.quitconfirm.setting.title": "设置", + "config.quitconfirm.setting.confirmtype.infinal": "当关闭游戏窗口时", + "config.quitconfirm.setting.confirmtype.inmultiplayer": "当退出多人游戏时", + "config.quitconfirm.setting.confirmtype.insingleplayer": "当退出单人游戏时", + "config.quitconfirm.setting.confirmtype.category": "设置退出二次确认的方式。", + "toast.quitconfirm.confirm.title": "二次确认提示", + "toast.quitconfirm.confirm.content.infinal": "你将要关闭游戏,请再次操作以关闭", + "toast.quitconfirm.confirm.content.insingleplay": "你将要退出单人游戏,请再次操作", + "toast.quitconfirm.confirm.content.inmultiplay": "你将要退出多人游戏,请再次操作", + "screen.quitconfirm.confirm.title": "你确定码?", + "screen.quitconfirm.confirm.content.infinal": "关闭这个游戏", + "screen.quitconfirm.confirm.content.insingleplay": "退出单人游戏", + "screen.quitconfirm.confirm.content.inmultiplay": "退出多人游戏" +} \ No newline at end of file diff --git a/src/main/resources/assets/quitconfirm/textures/gui/toasts.png b/src/main/resources/assets/quitconfirm/textures/gui/toasts.png index f5cd29cdcccfbcab1742b377e95d84a25c4f6c2f..77ecd74daf4adea89c4162d272499dd723c1048b 100644 GIT binary patch delta 596 zcmeC+xXv~qw4UjWr;B4qMcmuFhDDbhL>dy+Syi{}WEB5Uz?rrCfsv1%bK>=#F2~p# zqysKEoab1-`Oxc#BEgjx-u>P;Q+8$N?(gm!m%O?AYRzf)grBEw)^7giyz6Y*WdFvc zx8Hw%X<*6pl9|UoB%_ZbhV?;##S`O%&TFqr?Pkk0{;shx{Ij8^zWCfrSB8cN7KT^T z-#yry$;n{y;Qjji)$h(1E;{}7kHMaObvA2V7#1*of4}d^=Ed*%^|Q}BzyA{`qPv}~ zzJb9Zfr){4NA>*c%jY*|_b@p8z0~Zm{h9`2L&iM2C&G*k5nT`cSr~4G*nRkH^kaRS zy=T4rpL)p?yBPx7|FtfV)~{zSeYtS{y&K|<>lhZ4KEMCxsd)2pRfY?j8c+Y5#Ne>l z?>vLeKZ~`7ObofZcHOaGrwwFiy=R*9o^6j3!-W-}L>~a9*6#l3x`4r9wVT{OO`r!> z?Pq?V$8hAa9z(%xSB6u(>sL-QoYCa+iyQbwnG$cFs=sS)$~2F; z;nW$+Hju&5hiQ7F#PGC@`GC<`%jJLjl(w-qbNSwtT=BnH#zGA7jmune5Z@W^H5u0#8>zmvv4FO#q2J1Wo_| delta 775 zcmcc4*1<6$w4Qmcr;B4qMcmuFhIv;UB-k$8by>udn|FX!scQ~Hr$^EB=PNGkQSVJl5zk)xxBm53_isgo`J&Y)bZy_w z2;8q6mY$wo$Wa*^7uV*;5u)&h<*0w5(*ize#)8^fS$BiIlj|o>wh&@6wdkmI|2TPe z@*2HtMush}3x$@W-xGg6zZ$sxLD>Fv zGiJ-ni>;2|E&V%EX}d;rR#G>-{V)g6#frM=!2jf4n?*_H_Hl4h#nt z&ykyV?BcHG+5Uwl@f;;(qV@kc7#XT>h5gx^<@7+1g~3Oo#YJ93)j6S3^SgJkV) z?LUqm*_jx;DujPGT{>xhy8OOblmbHn)64pQytN7`Kde6?r|8cAmfABBwKm$XA=GDMI zbHC^vFk@o)_VvR0de@`-(~h?~Ffs(M*!W|+&p*%B-ap?%68LkLwER1H;Q!6w#`gaU zFTcIFHBT@3|4;L6rzIKQsEhdD3fg_G{%q-49g; zU7yny{9GEpPhf$>(fIa9!&lflw zxmxBf_@U{?aV1fi;m$I}a$sqDnVs-b-h6@Ia47|b&s8k{j?($ZB!2SI U*JkOmWCkGcboFyt=akR{0HMH2=>Px#