From dfa65d77738e90c6f4c26030d39ce3a2afaa0156 Mon Sep 17 00:00:00 2001 From: 502y <53784463+502y@users.noreply.github.com> Date: Fri, 28 Nov 2025 00:11:23 +0800 Subject: [PATCH 1/6] =?UTF-8?q?feat(GUI):=20=E5=88=9D=E6=AD=A5=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0=E4=B8=8B=E8=BD=BDGUI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle.kts | 7 +- .../java/i18nupdatemod/I18nUpdateMod.java | 36 ++++- .../java/i18nupdatemod/core/I18nConfig.java | 7 +- .../java/i18nupdatemod/core/LoadDetailUI.java | 126 ++++++++++++++++++ .../java/i18nupdatemod/core/ResourcePack.java | 3 + .../core/ResourcePackConverter.java | 1 + .../java/i18nupdatemod/entity/LoadStage.java | 36 +++++ src/main/resources/icons/CFPA.png | Bin 0 -> 10729 bytes src/main/resources/icons/CFPA_with_title.png | Bin 0 -> 2139 bytes 9 files changed, 210 insertions(+), 6 deletions(-) create mode 100644 src/main/java/i18nupdatemod/core/LoadDetailUI.java create mode 100644 src/main/java/i18nupdatemod/entity/LoadStage.java create mode 100644 src/main/resources/icons/CFPA.png create mode 100644 src/main/resources/icons/CFPA_with_title.png diff --git a/build.gradle.kts b/build.gradle.kts index c4288ad..ca880d4 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -63,7 +63,12 @@ tasks.test { } tasks.processResources { - filesMatching("**") { + filesMatching("**/*.json") { + expand( + "version" to project.version, + ) + } + filesMatching("**/*.mod.json") { expand( "version" to project.version, ) diff --git a/src/main/java/i18nupdatemod/I18nUpdateMod.java b/src/main/java/i18nupdatemod/I18nUpdateMod.java index 1afd352..818b46e 100644 --- a/src/main/java/i18nupdatemod/I18nUpdateMod.java +++ b/src/main/java/i18nupdatemod/I18nUpdateMod.java @@ -7,6 +7,8 @@ import i18nupdatemod.core.ResourcePack; import i18nupdatemod.core.ResourcePackConverter; import i18nupdatemod.entity.GameAssetDetail; +import i18nupdatemod.core.LoadDetailUI; +import i18nupdatemod.entity.LoadStage; import i18nupdatemod.util.FileUtil; import i18nupdatemod.util.Log; @@ -24,10 +26,13 @@ public class I18nUpdateMod { public static final String MOD_ID = "i18nupdatemod"; public static String MOD_VERSION; - + public static volatile boolean shouldShutdown = false; public static final Gson GSON = new Gson(); public static void init(Path minecraftPath, String minecraftVersion, String loader) { + LoadDetailUI.show(); + LoadDetailUI.setStage(LoadStage.INIT); + try (InputStream is = I18nUpdateMod.class.getResourceAsStream("/i18nMetaData.json")) { MOD_VERSION = GSON.fromJson(new InputStreamReader(is), JsonObject.class).get("version").getAsString(); } catch (Exception e) { @@ -47,6 +52,11 @@ public static void init(Path minecraftPath, String minecraftVersion, String load Log.warning("I18nUpdateMod会从互联网获取内容不可控的资源包。"); Log.warning("这一行为违背了网易我的世界「开发者内容审核制度」:禁止上传与提审内容不一致的游戏内容。"); Log.warning("为了遵循这一制度,I18nUpdateMod不会下载任何内容。"); + + LoadDetailUI.appendLog("I18nUpdateMod会从互联网获取内容不可控的资源包。"); + LoadDetailUI.appendLog("这一行为违背了网易我的世界「开发者内容审核制度」:禁止上传与提审内容不一致的游戏内容。"); + LoadDetailUI.appendLog("为了遵循这一制度,I18nUpdateMod不会下载任何内容。"); + LoadDetailUI.appendLog("请您手动关闭此窗口"); return; } catch (ClassNotFoundException ignored) { } @@ -57,13 +67,23 @@ public static void init(Path minecraftPath, String minecraftVersion, String load try { //Get asset + if (shouldShutdown) { + return; + } GameAssetDetail assets = I18nConfig.getAssetDetail(minecraftVersion, loader); //Update resource pack + LoadDetailUI.setStage(LoadStage.DOWNLOAD_ASSET); + if (shouldShutdown) { + return; + } List languagePacks = new ArrayList<>(); boolean convertNotNeed = assets.downloads.size() == 1 && assets.downloads.get(0).targetVersion.equals(minecraftVersion); String applyFileName = assets.downloads.get(0).fileName; for (GameAssetDetail.AssetDownloadDetail it : assets.downloads) { + if (shouldShutdown) { + return; + } FileUtil.setTemporaryDirPath(Paths.get(localStorage, "." + MOD_ID, it.targetVersion)); ResourcePack languagePack = new ResourcePack(it.fileName, convertNotNeed); languagePack.checkUpdate(it.fileUrl, it.md5Url); @@ -71,22 +91,36 @@ public static void init(Path minecraftPath, String minecraftVersion, String load } //Convert resourcepack + LoadDetailUI.setStage(LoadStage.CONVERT_RESOURCE_PACK); + if (shouldShutdown){ + return; + } if (!convertNotNeed) { FileUtil.setTemporaryDirPath(Paths.get(localStorage, "." + MOD_ID, minecraftVersion)); applyFileName = assets.covertFileName; ResourcePackConverter converter = new ResourcePackConverter(languagePacks, applyFileName); converter.convert(assets.covertPackFormat, getResourcePackDescription(assets.downloads)); } + LoadDetailUI.appendLog("资源包已转换完成。"); //Apply resource pack + LoadDetailUI.setStage(LoadStage.APPLY_RESOURCE_PACK); + if (shouldShutdown){ + return; + } GameConfig config = new GameConfig(minecraftPath.resolve("options.txt")); config.addResourcePack("Minecraft-Mod-Language-Modpack", (minecraftMajorVersion <= 12 ? "" : "file/") + applyFileName); config.writeToFile(); + LoadDetailUI.appendLog("资源包已应用。"); + LoadDetailUI.setStage(LoadStage.FINISH); } catch (Exception e) { Log.warning(String.format("Failed to update resource pack: %s", e)); + LoadDetailUI.appendLog(String.format("I18n Update Mod 运行失败: %s", e)); + LoadDetailUI.appendLog("请您手动关闭此窗口"); // e.printStackTrace(); } + LoadDetailUI.hide(); } private static String getResourcePackDescription(List downloads) { diff --git a/src/main/java/i18nupdatemod/core/I18nConfig.java b/src/main/java/i18nupdatemod/core/I18nConfig.java index b0169c7..7074083 100644 --- a/src/main/java/i18nupdatemod/core/I18nConfig.java +++ b/src/main/java/i18nupdatemod/core/I18nConfig.java @@ -1,10 +1,7 @@ package i18nupdatemod.core; import com.google.gson.Gson; -import i18nupdatemod.entity.AssetMetaData; -import i18nupdatemod.entity.GameAssetDetail; -import i18nupdatemod.entity.GameMetaData; -import i18nupdatemod.entity.I18nMetaData; +import i18nupdatemod.entity.*; import i18nupdatemod.util.Log; import i18nupdatemod.util.Version; import i18nupdatemod.util.VersionRange; @@ -62,8 +59,10 @@ public static GameAssetDetail getAssetDetail(String minecraftVersion, String loa GameMetaData convert = getGameMetaData(minecraftVersion); GameAssetDetail ret = new GameAssetDetail(); + LoadDetailUI.appendLog("正在获取最快的镜像源..."); String assetRoot = getFastestUrl(); Log.debug("Using asset root: " + assetRoot); + LoadDetailUI.appendLog("即将从"+assetRoot+"下载资源包"); if (assetRoot.equals("https://raw.githubusercontent.com/")) { ret.downloads = createDownloadDetailsFromGit(convert, loader); diff --git a/src/main/java/i18nupdatemod/core/LoadDetailUI.java b/src/main/java/i18nupdatemod/core/LoadDetailUI.java new file mode 100644 index 0000000..2185fc9 --- /dev/null +++ b/src/main/java/i18nupdatemod/core/LoadDetailUI.java @@ -0,0 +1,126 @@ +package i18nupdatemod.core; + +import i18nupdatemod.I18nUpdateMod; +import i18nupdatemod.entity.LoadStage; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.net.URL; + +public class LoadDetailUI { + private static volatile LoadDetailUI instance; + private final JFrame frame; + private final JProgressBar statusBar; + private final JTextArea logArea; + private final boolean useGUI; + + private LoadDetailUI() { + useGUI = Boolean.parseBoolean(System.getProperty("java.awt.headless")); + + frame = new JFrame(); + frame.setTitle("I18nUpdateMod-资源包下载进度"); + frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); + frame.setSize(854, 480); + frame.setLocationRelativeTo(null); + frame.setLayout(new BorderLayout()); + frame.addWindowListener(new WindowAdapter() { + @Override + public void windowClosing(WindowEvent e) { + shutdown(); + } + }); + + + URL iconURL = getClass().getResource("/icons/CFPA.png"); + if (iconURL != null) { + Image icon = Toolkit.getDefaultToolkit().getImage(iconURL); + frame.setIconImage(icon); + } + + // 主面板 + JPanel panel = new JPanel(); + panel.setBackground(new Color(220, 220, 220)); + panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); + panel.setBorder(BorderFactory.createEmptyBorder(15, 15, 15, 15)); + + // 状态栏 + statusBar = new JProgressBar(); + statusBar.setString("正在合并资源包"); + statusBar.setStringPainted(true); + statusBar.setMaximum(LoadStage.values().length - 1); + statusBar.setValue(100); + statusBar.setForeground(new Color(102, 255, 102)); + panel.add(statusBar); + panel.add(Box.createVerticalStrut(10)); + + // 日志输出区 + logArea = new JTextArea(6, 30); + logArea.setEditable(false); + logArea.setFont(new Font("Monospaced", Font.PLAIN, 13)); + JScrollPane scrollPane = new JScrollPane(logArea); + scrollPane.setBorder(BorderFactory.createLineBorder(Color.GRAY)); + panel.add(scrollPane); + panel.add(Box.createVerticalStrut(10)); + + // 提示文字 + JLabel tip = new JLabel("如遇到进度卡住,可以点击下方按钮/关闭此窗口停止此次下载。"); + tip.setAlignmentX(Component.CENTER_ALIGNMENT); + panel.add(tip); + panel.add(Box.createVerticalStrut(10)); + + // 停止按钮 + JButton stopButton = new JButton("停止此次下载"); + stopButton.setFocusPainted(false); + stopButton.setBackground(Color.WHITE); + stopButton.setAlignmentX(Component.CENTER_ALIGNMENT); + stopButton.addActionListener((ActionEvent e) -> shutdown()); + panel.add(stopButton); + + frame.add(panel, BorderLayout.CENTER); + } + + public static LoadDetailUI getInstance() { + if (instance == null) { + synchronized (LoadDetailUI.class) { + if (instance == null) { + instance = new LoadDetailUI(); + } + } + } + return instance; + } + + public static void show() { + getInstance().frame.setVisible(true); + } + + public static void hide() { + getInstance().frame.setVisible(false); + } + + private void shutdown(){ + hide(); + I18nUpdateMod.shouldShutdown = true; + } + + public static void setStage(LoadStage stage) { + SwingUtilities.invokeLater(() -> { + LoadDetailUI gui = getInstance(); + gui.statusBar.setString(LoadStage.getDescription(stage)); + gui.statusBar.setValue(stage.getValue()); + gui.logArea.append("当前阶段: " + LoadStage.getDescription(stage) + "\n"); + gui.logArea.setCaretPosition(gui.logArea.getDocument().getLength()); + }); + } + + public static void appendLog(String log) { + SwingUtilities.invokeLater(() -> { + LoadDetailUI gui = getInstance(); + gui.logArea.append(log + "\n"); + gui.logArea.setCaretPosition(gui.logArea.getDocument().getLength()); + }); + } +} \ No newline at end of file diff --git a/src/main/java/i18nupdatemod/core/ResourcePack.java b/src/main/java/i18nupdatemod/core/ResourcePack.java index 6c890e5..d39cdd3 100644 --- a/src/main/java/i18nupdatemod/core/ResourcePack.java +++ b/src/main/java/i18nupdatemod/core/ResourcePack.java @@ -41,11 +41,14 @@ public ResourcePack(String filename, boolean saveToGame) { public void checkUpdate(String fileUrl, String md5Url) throws IOException, URISyntaxException, NoSuchAlgorithmException { if (isUpToDate(md5Url)) { + LoadDetailUI.appendLog(filename + "无需更新"); Log.debug("Already up to date."); return; } //In this time, we can only download full file + LoadDetailUI.appendLog("正在下载" + filename); downloadFull(fileUrl, md5Url); + LoadDetailUI.appendLog(filename + "下载完成"); //In the future, we will download patch file and merge local file } diff --git a/src/main/java/i18nupdatemod/core/ResourcePackConverter.java b/src/main/java/i18nupdatemod/core/ResourcePackConverter.java index 0a97712..9e1ae6e 100644 --- a/src/main/java/i18nupdatemod/core/ResourcePackConverter.java +++ b/src/main/java/i18nupdatemod/core/ResourcePackConverter.java @@ -40,6 +40,7 @@ public void convert(int packFormat, String description) throws Exception { // zos.setMethod(ZipOutputStream.STORED); for (Path p : sourcePath) { Log.info("Converting: " + p); + LoadDetailUI.appendLog("正在转换" + p); try (ZipFile zf = new ZipFile(p.toFile(), StandardCharsets.UTF_8)) { for (Enumeration e = zf.entries(); e.hasMoreElements(); ) { ZipEntry ze = e.nextElement(); diff --git a/src/main/java/i18nupdatemod/entity/LoadStage.java b/src/main/java/i18nupdatemod/entity/LoadStage.java new file mode 100644 index 0000000..b8a9c1b --- /dev/null +++ b/src/main/java/i18nupdatemod/entity/LoadStage.java @@ -0,0 +1,36 @@ +package i18nupdatemod.entity; + +public enum LoadStage{ + INIT(0), + DOWNLOAD_ASSET(1), + CONVERT_RESOURCE_PACK(2), + APPLY_RESOURCE_PACK(3), + FINISH(4); + + private final int value; + + LoadStage(int value) { + this.value = value; + } + + public int getValue() { + return value; + } + + public static String getDescription(LoadStage stage) { + switch (stage){ + case INIT: + return "初始化"; + case DOWNLOAD_ASSET: + return "更新资源包"; + case CONVERT_RESOURCE_PACK: + return "转换资源包"; + case APPLY_RESOURCE_PACK: + return "应用资源包"; + case FINISH: + return "完成"; + default: + return "未知"; + } + } +} diff --git a/src/main/resources/icons/CFPA.png b/src/main/resources/icons/CFPA.png new file mode 100644 index 0000000000000000000000000000000000000000..88d4fdbc8200fa427c26276f1f6d04aafb001fe9 GIT binary patch literal 10729 zcmVRPR|EA49g&bGPFj4iOGty6YpSMzzEeUNsi{E+uM z@B4e-Uy$JYLvAO)O_12PUw(qwd5ClRKZy+qOIlLR+ z@1Nc7aQQdd9Nuo5)7uFE3NG!^C}q=ab>@THI;;NN-BM0W#R6Q~Q>X|6$$?pi$6|AM zJE!f-&GSpX&fa1Bc3%+N%C%kDP;Sz^vZ=M=aCdY0J8gBALo!qn=h~)1KoCe8+}@Dv zV9(?&Lle$!o5Qo!zUaFE0K{C|MHe|L8R={+d-a0u>OWk(vG#qg?cpHmFoQ)mCSDXIp30U)t*}Z&#SLKCW%z6YEYOAuI}Z zr>}F|=IXFHJYAD>?)rgo$CUtJ;@UPoVA3lOZ|kgjrM1rTW^=XautBR>Utf?_tQ&zm z{=)Hp8JuulH(_(N1Av)pdkO(LDw%JoH6LlMGe3XHrn`09kswT)|AiVZm` zncLD<`O1do@|U}t%U>_nP0FGb$U7fQT=tvij{PQz<^vm> z%b%&YmdtQ%6H^qWK%V@2?|sj|+5Zy&P;za{dPJj?&FtOP{l%T=hv1eK(wU!_M=Y-r(90Dipjx_P=}T z%156&`d0wZa&3!1YOdeW@r7Hi?*28`cI1kPYXj);_zTCs^XPL&UlYW^f1ZD{|5q=4 z@Y;8{wj)<0TpK`z@mW{-FP=Q~JNu$<7uU83WY0@Sj{P74F4+y6_x>x_wq#4e31rUc zwf^|`Zy#Frg{rx>MIbk@fEwPPI`r*WJTATIyj#D;wLRHTPy*>0o;&|%e?0JHBpMgQ zQGf*81|VGCp4oT5DG`h1H*DT}Ki4*8q96ow+|9ZV~Z6)JR9NA_L%)t#sW<;6(C8-awdsQUZAe*LKlo9h~` zZ4qD&LLAnPJ`jl$S)Wr|()9Xm=kL2wfhxSL8kYsU5XhXSt8kYl{3gkbZI{e*(A5MOsGXn%zL4smX+0jQ!94qML##8$) zz5fb>%E(C?FDC-=2EvMmpE~kH?}+{Syx&}aRmf>o+W<)A7-QE|O4XD5F1`P9i?(cv zv5RI&-UZ?gEE#_O%=6EU3@R?m>x~6iM~q@ny`dMxER_9K%XFvix$J8f8&$>y#xI_R zyzZn=IL9vhkNppxbcg2zaTFP1DMpSQY>0!vk9it@{r1m~IK1=CtlS_4c@xON(KqjU z^uR-}M-$;nM3nuKp8)?6Nup5MJ^-j9%<6son5XWSZ~o-qgmbK&)f=4!>r*T&iYcCX z|4%<1obS1B<-M?93A26Otln23Hx$}s00bZr7X#qPNAKea5yazSNJOQ8<7=O%ghO85 zItVglC~vk(Md;EU7v1~GI#c5@w(rHNK%72D#ZyOr`^3E0cFvS49uvXD``cN&uR!jU zHVuQO#Fh4#L|jA)C?1nQA|@r@lgdL`?T|B#R3x{3{<8b8snA<{*}M;HQ>Mq!@_NLZS7NFD}GEKupyiednRK`fRcpK^r0v0YD{$uBIafI|GFixY#>L7LLw5!^iRC^*lX{NAHJHcd$95sIXZsmj%YlR zwu7rw#;!vrkR!MVe9pq_3V|RXf2HrQe|>N4@Xc&opK*a;QA~Vn@^HpzTm+%!`$*+M zFjUS$b@zv4ID-Ilxb20RT@Z~&Re$S!@`?Ax5A9|8+KlI<_t|!Rs_ZA|~eAw46CK_WHN!oX?04 z(r@d%&J%VuFmWv^Xv|IsE*rVJeNhvSqTqFuk}t=Z*ejVTK&~tj4<@ccO|oSv;AnSv z=j$!nvT-WsGa`^fV{d+eiR(~>_{RbyLGA_%uuC+oAYcBa)3IA(6a%^1Pp&)?|7APm zoeD=M4u5V>_l=Z#lhFP~IeiYR-7|9)-RsanB*HrrX8Suh zixx%@5ck_oTu0?xS{Cmg`1}7COGJ3FOBW3(xHdr`4biX?=0~|}Lfk*syNAkolm&uC zF~#wzBVVCPt5-tL{g!b@QXl(Im2rjK8T#e-I==QBw( zEa%z;fh<{^sv|>LxM0jNl5=TW$^tnydFVc>=Q2&mTO6SgAH#jUWVXN)Vz3Xj0T#^v zl(=W+*loFg)$?shu;s z*dpXHfXh~q*L(KQ_1u!n@i`0R*yNFY2*RIM1z1o?&TESSQ}tBJMl;2_&*QdP^XjyF z!b_VMJPVcC9-p&7dS;H@p0iaf5)BoH|DiITo?0a%9u))T*XG@(d_X$w!>tev=P$Ir zclPL=*&dsdKzgQ+f70%mxrmZgERmzn#Y+%T985K-EBpJGO7dz?zDdNSU>oRwSVWqa z`}It}|EX+`%}F4y^}q0Mlq_PASP=-Mq|8=eP%GXJbi^b;4)-7E-Qf? zpL+Lh1OZyrA=m;z0F+uElr@c#6;dn>qaf#bj=BWJprmRF3>BI8He{;8EaFB7JT8Ix z(PmbicH(<;($;fRrsJ{_$k6;rO0o3$MkG#v*1QPT_5rBs>LtH~#2lX&AUG)XZYXOS zhU)GfvdmF7NKpEnVhfRISOJc4cFP=$IfgO@FJ{ar9JUXB!tR;jopYWEnJRdu_SPI( zzQ(&?A(u;|SblfiWhx(8R6=7~q}0EU_$BVxt0!MX<@C-F^yd9W3B$y z)Z*CHp-2c(po*mbcqs*fMKSS*(?@S*#VQ`6(E7+%6hq0{w1mGB^rT(|Bphz7*+KRw zNflto6m-k87BZ+J0G5U^)~=6;aOJRl@al~>h-r5B9(`rqIHmUaS*tIj*A_hg<6ZQbaM4)NhjN* z3qx1>F%M_8b_LFb@NGom_2Y*SejOnWsXTvE%M-Q_l2(CFDv*PtZ)R-5DUe^*OXWyJ z6o>LWi-TasHIa1FaE(A5o`ovAcbd~$y8>%L6+DRu$beKHBqJC^6yoAU;uuu64S-CU z|Nqxf$KVckz_q5~Z+sNT>EYLheT^N5k7ta+G` zja4cj2q;Dt2GWjJNn216( z?*0&zIyac>Pl2wK+dZb$^xJ#RaWT#j2#zD%bT|=6iEq(FRw3jw8nYv(l_yjYhKjZ! z&{?u~;`7Dm!r&F&koTh}((0Y`)U{^>@(zvzEX`CiaxJMmL?&N}#BuUP%>6~;#JRtV z5`c)~Df3o{V-Qi|%z3fX=M`BnYb+5dIWhCW)fYEk{zq6X5Ua6jIgvmDA`!mc5}|oX z(4!-3M$tj0@`2Gh3o3&!d(M_Y`-xAj2xQGZh+e6u)Gk+mc|3ON&AU)#0Lohip{lD- z5J!$oERA00@XpslGJ&Y&>h+lf%`+llIRriWoX?ZULS#kw>J29ZVNisaHul?2Tnotr zf+vu|*s?8hJPQ^wn=V&km;zk0RityD;7J?iLZsi`^I1qH5UoNhOtCnIaL!j6^;042 z)55~3CYbH(%1aTpVnimE&qA_%5UoPHe&VWmO2Dlr8}!p95>&z5Up@5+5IljbkGN_cGLQqt8} zyUeR7VW&!$KvpcxRB>$rNhF{K`$#kC53M)w1Yl-O=}AZ?5R2A4%ZXJ2WJQ&Li$7uQ z!DS=3=knV_kPlQEs*cK}GBWIHjX+QdntOdr0Y>mFlu}ySWfRv-H3XK6tq*;AN>ru& zD?caM2NAjRZjk_wqjnLPA8CQ587sMDydL}#liD)6^7EQiEQ`(}1T1m@Q%k#SfG5P@ zwpD@Kb~^h{uJ(gM<0Wekqa5UqvrVO;>VuV^*9b(IVsQgMM~}56Vp6i|I`LYXsUb`B zDD}%^v2KOd$F+I1!Es2GYAbqIeotEVCy_w7&wpG;#3B;%3s;E5A~NtgO2IbJ366n&O#+=OjBj#92oU>#xUQ&Sw;U?_jcNusacf~Z`g)*|;b|Iis z7}pF8DW+ILL@%2x7w8HPH4s=h)mRYAz7|dC#On8w3dF26PvSVR+uN8Wh^JK)qgRcP zO`;eI;T-bAi-AZ;1yennU~#&d+!&2T`Sj6jxVtmN7|F{Fz`{0s)daVWT@Pj*1al0?MIx47~iPWEAxYkVNr zc*&npWr!@Ooexx~dMMfZDFuS#NI^`o@B{*mi8}B(Pp=AzrTnd0#`D1YnT38P2u zU;#DxS^*KqK%w@L{Y99h(pZ)B`<`+ar=hf-*YQ}1xESoi&F6@Ngr@^va9Im6tgv$> z_y8W4kpJc(uZGd8NVX+V^JxDJlcW|0p}wjpN3J# zzPY^hNV4}+3M3I1t!-J#6P9MGQa+8jC?XJxNFf$MAre$V*smtjP>J88AqC)g;e=Wg z5@%1l=%Pk-1E>T|y0VjQ6>H?Jqzhl%Lwxa4A(pVyW|0&DCWA;wK^A$AVsi3lLJ%N` zAn#xS6}c+NL<_jH%lxdSAg5T-G;?``g=Imn!win`M#irzKpkQRfd!NxSJSUAQfF#< zHPvS+AANX2v`G8TY?0=P&4v#`OqT@s2j*wSQLi&MCUwvuoj}Z5(=d($?}8TN8N#R8 z7(t4m;z%(PSY{?<$E+?rp6aud-!`p67gI{ryvt3GhSM*VN>HI7%X%TWY@i(kDG{M_ zTBSDSJT2|x*q}CeY2BR_QvX3j;wVT^cARtpK7v4mW+=T`Q))~1d0K(+F`_pfOTDgu zD%mLrnTQLkRD1;s(i4bYQIc|c1sQYFal}sR?ko_)Qaj8D!cLH4I#CL63zb&cXH#pc z?@9N0T7h&_Zg`j0-B|#~Q%|v^a&~sn<56K1i?3jQdK-rNRb_rwlU5)XHSYMaLaJVq zWyK}2G^wh-B@={w%ODdAvtj4Oe@gf<$&yCev{=3@P@ERoxSRma90%s~| z*oRvgb*vMDKzL0gM9on*X)^cY%<5ZoP1mQsjN`zMFxfOd$O@QW1M>`aXidcVmqRV^ zF=2{|LOJ;D-(MxresSCgNUM2`}RJ0C)vC;-*O`}l1 z^?j)7>IGBH1SuGVriRhtORk2XVaSx4>OlG9TVssiOJmijSJ>6ddp&&!kI+lGqV zGQ)8k;x}!%<5q*pnAQI@r6rzDYxf(q#-_heIhQUfg9kL`jJ{P;@PwG$NDNWjZATSh zFxMAP17Ll*4YcOm^Wyw&ea8K$e4#ewX8#o}yB}ySYg<#rJr$JKKzDDr{(Goc#>vFo zTssL;1=Y0z1m;ItDEl*-5*L_i$H_{7g^boR52hMwrO)`%m6s5>M4J7G-e_)rW@pDI zf0D~RC<~<0P(65c=Z&AIdOjTppMaR|P_3dEkD@R)*iJblMPIf6M(YfvbNPU-Yz{2- z)I#hcVHq#_DvBgg(3fW)Y)<&i*KhjFzMSuq>j`JGz5c?ds|}6M(zymzq_POPx9bS{^uO-?Y?Q16fAn&wAC98Jk$)>Sm6Vrk&IjeBo1sEnRm z??Zc=`IhZ>ehJ5clU*f+)<^3}js-L@H`qqj_stdGl94RyUr32P9&J6TnD3K&%~oOTK(9 zDnTii+hjx_Dw#UCyX(fB9U!Ja6=AT{(OZ7?%vWR#Nr^`#)x2)MZck27<()oLudrU*62i!02JH&O%jZAJlC60E|^r zltz86Wg#mc>XOEt4_J*=C#YHaF^tB7->~^J-{fjvuay` zAc?G;^KxC)TbH(c;{VVx_za8+q|#75xT9tFeM}`P^~<)y8oV8Ip2#{|RDL zS)8tA$jUr`B%ri$6jX-XLr9Y0VW2Cop<-^$lOGY`pfN2$Me7hWYH-@Ntqy{LqlLK}={6J6SJ#h;rjZBH|O-E5JN@mkdPM@VoH*hg9b3n(D4 ztb>J9O<83!@&V#0Ti!ARY9lk9yc2N|xrjjr;(?Xv$xny}#}SBxlTTr#@*tS1)9?IC zM5z0pF8IRr7Ht`|SfnJdl5ThN*4yuqh)~X^S}MH<43!zvjnk5dNnviNoeWDUq}sfu z+6nUipDC8@f`&D4; z?|@L6-tj8qBFHuAqZV39yB_bfcJHTUY!X;Y*uJ3Ql7~&|(m}Sap9x~fE^i*@Rbmg@ zD0Ci1o0taNdfL$fx>9?}RVUw~@pMdFBwfFkIQg(kdk=+S=-Q2+{u(VqQ^1-)R5Eq& z%C>9&g{|vngIF4avZi4!O~@;nlH4=vQb9~v7N_VfOppPEN!)=%Tnr0i^{{ZNCF7ow zp~42TG;Q^89D>(xyybR-%9whXq5-QVKRT@&Ufo)A(SvN>BNK9sA0)E;_btpfB1t6e zR3=w~%Q`ZklMcGl`89q+EGmKN6B|D2Yo89OJd`mZYIoO-4>Xrii?hlG)@$P2uzBwT zQjwf`_$WDRXc6J2?AWoy%NCDIt6S?2PXYA4b<=B1jdzg^t4 z;}^7y%s^g>MqRh@=6ku?8v!!7t?6Wi^wKsw)!{i*jSTR=2GB&+R z#6^sRwJ)4%CO27Ap)a3H=^I+=#>pZXso33hueg$ZGX79 zX~$Ev4a}0f7Op+7_JZG)YOI_zbaJ^Ne7-l zAnaZHMW#zEA|pd~l640=J7t=jcBOFaiRt;B7kzP;jEzS4X~=u&bE~mx?81f}|C;an z%GE(yS%-W?B#x5RCYb^e;pEaP8zkZq@H)(E-dF0ppe}KOLhB(z;8StamOE}TYb9lU(q=^$}%`jEqM`EX-~wYWC4k}!FEVcEMasuggjYU_sVKok;8`e#sh*7x^iady|I>zhC4phYpPA;96R8Ldh zDEp>z{{ZPH(WXjLWwblFgUHX-4Wm4|LuzAzra#PKDFW=ZXK8OSOBoH{gk%;fze#bZN z+wsl%8e>CV!U@cElVl&hY|73QD#2w#+InA^Ap8-TnmJbyRi+Mi-`#oRy=IMtx!4(+ z@MemYj6PfM6)&H7_J4cAt}Sfe%kMJ4!e}#D_NN#@L~*F@?x9?MG#Zw{%*ifBdd8b; z$3d4Q)3B|q`wzEWaQ7XwZ@?hD7RU;34!-t<_a@%{jt}!zuz8=5PfeEiiD9X8qzf5^ z&JC4q)Qf(2ohERMHPN=CZtKx=qIGc`!mVXp&+XlI=UsH_=(0gU2!tRM35ovR_qPX+ zO&itqroJqOCuxhMlQc7^}}JT{abBX$0!F9RKL|T4U3HUB7AX z*UefBXIZD|C>VjPFg!oFY5%|r|98$avz4uTB;q2N8)}8Hk6Ob|K7%SxFLP6U$Ry$j z%=UFret^g|9L$-{F@J$YR8jS8_AYPNDeb6H{@J143&zPc3xuo&)pYx{no6p6hsfZf)&ULulBuo z|NE1N9tcMLtaNvA*($*`!;iLOOd%4-z}j_!R$=Sq`BGS%%&v)$UZWVgu)F%VH(b&2 zA6k{Xpi(;vULXYSfXndGiRXSeVDGsbL4fhjHhz}@9ODfI)ifs)GL;Xkoqe>Dt>%VW zAh?`*SKOpm9^JdE`v+S)tS>2Kh55HD3W2OJw`{9<_V^ROw|l2AXZqUYw4$#I@B(U{ zlL@+0ttf`V%!%$byX-Cn%dWX16{CT+vW-t%)Oh)WR%6vT zE5`AFq8G>tgL8eKc)sVU$NZQl=Zefs?I81!Op&##A-*oHWu1SzqILK8ti~#Ool^^d zbt4csJ(?KLOuN1nO+>Ovy(1ja>E7a-TCISH;?S@yb50VDLu{jU+hbd6FL=1#(wLW` zZG2!|31o!;=GVN~``nLuXOG^6AdoijD$`PCF;KtlT@a-x5-k;@i`~}qesfjFo}a2@ zYUXMT6$tB6AS+Bb$2ROAc=_9tu92IQeePQslZy49@jk_?Pz||5GF$u3LF8kwD0)Rk23)o{hQg6zED%H{X$pN0NykM#shnl+R-~|nr zJ+ira+n-f(b#c~drGOxiRXDxQ@|SyFdEn)jMPG&@O`bZN3bXdDPw#5}(M4U&oD^o` zJAyz`FgW38d;EnDemY@u?dIAR7Qou;EzezddHW+9TPhB6Z493g1d@T54h&s8HnVii z+@eng07l}WyYiVY5Jnc4gT(vgXFlUKs8sCQ)>-w~4Ldp>vX<(KxmpEd2m)aUhs%#R z-2o*4Q~|(8q4)MhpUCYE=>ULmXg+ENK5lb~!&sDfziNEeRT7TGN&ui109Z+7+}dva z`K`M*{=CAhwXt#iVnq-Lj~SnJNdQ1|W`z2v<*d!&kzmm{A+Ab*kHh=NXI0wh6F2nq&Br9n2E4TO+vOqL`B5JaW* z0kIV&;%kVC5MGH|C{{!i5WE8|s65nDt02V(m3khQGTfr#-5*ZpX6`q$`+I#q-}h&C z=lbZiix)0mh{0eM3nF;2=&VN{tn*y-{Y!0jCpvi`d@-^CmLmp03t>WKuoS`yR6q(8 z3jwms&7DvX1~YfFLL^4S!YCF9s|di148f?Zn4(3XNeMD#I8HD&$jCw!s2~Ku8dd3P9m~kZz0u1;*E7dN z9QKU}qGaRVIwcma$8upUgbg4B;6W0Fj16QG$N@Aane30HkjPXbnM9;8@nkZK7RVyg zvF`>BwWgKHS+TtEcec^f!AfK5x|I7 z>%3<*@E{$iRcH_etj5l01f*~V!p5PVz70X85enZcR_op+3QZZ&2xy380*ReTw4I(>y!Tb3E4sT>-8vDI?kSfxoY9`EYvI(zo)wr$&D zVq(l@GoR1b>-7~C6%vW0rKM$Xa8R0C^X>VsUjA$1)x@N!HvRD7!)a-0@%ob}tEQ)? zmu0eY&{#r{*ys)D_Wv1}OIZ#c`cX<1@Ipn#!Pb(j1Y3yf#UY2%`A?Vpidz#;#9Jq- z6aCF&(>2eZ60X~dP0^W;m#ipY|85z`tgiW~IYK#>wB=mm6MfyWM~kGK+8>^!hxjP( zO}+l!_0?1+Da7Mr+OqRgjn20eODHj`p5L5j4}{lj&u%*qf9oZqz9erC!~JKkrqc3{zO1^FWc=7@myKQh z)spqM!p!KAU3g1l-)pz(%|};W2^I_TRWjT~sJ^|4e)ltnm(oAW`-R_MJ-HUca!vZ0GI#a}#cnXHqw>iWdgYGsmndTx-eA|1ANlQM88H>Wt&N z`s2=7&aA^*nQ@(ee%0dUAl%*9HEeibpR>kn?HFk5zQ20YbMT4n_H*~Ror~xB6F12| zvH&YR?V=8X{+m+-F-fpyDGapy?fSfNp_OhR$V7Q4Kgp-isY~tB{IrNlNHwa z{+Bk~UMUm`O5^8_`0BZ*ym+QbAG&_Ioqw$0i^pqrJFTP-c>df|4KQw0!t5Rl;UD~zFc^6-!1SBoTGP-!pR z*M05CfE>Y|5Q=^8T_6hYZx0Sx+R&Rj-Ff_{zue>fSnjcCe#FGw8!Ar2vAQfyR+z;3 qtEPhHq-LLR|5#$d-F>-EE|}X}IUDE2xZIlg-3$29yxOqj{C@+p2bjqK literal 0 HcmV?d00001 From bdf235a9cf096b1de0f010cd187c40edfab4c805 Mon Sep 17 00:00:00 2001 From: 502y <53784463+502y@users.noreply.github.com> Date: Fri, 28 Nov 2025 00:12:44 +0800 Subject: [PATCH 2/6] feat(GUI): Server Safe mod --- .../java/i18nupdatemod/core/LoadDetailUI.java | 35 ++++++++++++++++--- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/src/main/java/i18nupdatemod/core/LoadDetailUI.java b/src/main/java/i18nupdatemod/core/LoadDetailUI.java index 2185fc9..10cdfa0 100644 --- a/src/main/java/i18nupdatemod/core/LoadDetailUI.java +++ b/src/main/java/i18nupdatemod/core/LoadDetailUI.java @@ -18,7 +18,14 @@ public class LoadDetailUI { private final boolean useGUI; private LoadDetailUI() { - useGUI = Boolean.parseBoolean(System.getProperty("java.awt.headless")); + useGUI = !Boolean.parseBoolean(System.getProperty("java.awt.headless", "false")); + + if (!useGUI) { + frame = null; + statusBar = null; + logArea = null; + return; + } frame = new JFrame(); frame.setTitle("I18nUpdateMod-资源包下载进度"); @@ -94,21 +101,36 @@ public static LoadDetailUI getInstance() { } public static void show() { - getInstance().frame.setVisible(true); + LoadDetailUI gui = getInstance(); + if (!gui.useGUI || gui.frame == null) { + return; + } + gui.frame.setVisible(true); } public static void hide() { - getInstance().frame.setVisible(false); + LoadDetailUI gui = getInstance(); + if (!gui.useGUI || gui.frame == null) { + return; + } + gui.frame.setVisible(false); } private void shutdown(){ + if (!useGUI) { + I18nUpdateMod.shouldShutdown = true; + return; + } hide(); I18nUpdateMod.shouldShutdown = true; } public static void setStage(LoadStage stage) { + LoadDetailUI gui = getInstance(); + if (!gui.useGUI || gui.statusBar == null || gui.logArea == null) { + return; + } SwingUtilities.invokeLater(() -> { - LoadDetailUI gui = getInstance(); gui.statusBar.setString(LoadStage.getDescription(stage)); gui.statusBar.setValue(stage.getValue()); gui.logArea.append("当前阶段: " + LoadStage.getDescription(stage) + "\n"); @@ -117,8 +139,11 @@ public static void setStage(LoadStage stage) { } public static void appendLog(String log) { + LoadDetailUI gui = getInstance(); + if (!gui.useGUI || gui.logArea == null) { + return; + } SwingUtilities.invokeLater(() -> { - LoadDetailUI gui = getInstance(); gui.logArea.append(log + "\n"); gui.logArea.setCaretPosition(gui.logArea.getDocument().getLength()); }); From 957c3efa465f2a784c37aa13ea8008bcab280906 Mon Sep 17 00:00:00 2001 From: 502y <53784463+502y@users.noreply.github.com> Date: Fri, 28 Nov 2025 00:32:26 +0800 Subject: [PATCH 3/6] =?UTF-8?q?fix:=20=E8=BF=90=E8=A1=8C=E6=97=B6=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E4=BF=9D=E7=95=99=E7=AA=97=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/i18nupdatemod/I18nUpdateMod.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/i18nupdatemod/I18nUpdateMod.java b/src/main/java/i18nupdatemod/I18nUpdateMod.java index 818b46e..32eff3b 100644 --- a/src/main/java/i18nupdatemod/I18nUpdateMod.java +++ b/src/main/java/i18nupdatemod/I18nUpdateMod.java @@ -118,6 +118,7 @@ public static void init(Path minecraftPath, String minecraftVersion, String load Log.warning(String.format("Failed to update resource pack: %s", e)); LoadDetailUI.appendLog(String.format("I18n Update Mod 运行失败: %s", e)); LoadDetailUI.appendLog("请您手动关闭此窗口"); + return; // e.printStackTrace(); } LoadDetailUI.hide(); From 6d59f3a1e415d780352759671096d9d64774bf88 Mon Sep 17 00:00:00 2001 From: 502y <53784463+502y@users.noreply.github.com> Date: Fri, 28 Nov 2025 00:35:23 +0800 Subject: [PATCH 4/6] feat(GUI): add log to shutdown button --- src/main/java/i18nupdatemod/core/LoadDetailUI.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/i18nupdatemod/core/LoadDetailUI.java b/src/main/java/i18nupdatemod/core/LoadDetailUI.java index 10cdfa0..f90dbda 100644 --- a/src/main/java/i18nupdatemod/core/LoadDetailUI.java +++ b/src/main/java/i18nupdatemod/core/LoadDetailUI.java @@ -2,6 +2,7 @@ import i18nupdatemod.I18nUpdateMod; import i18nupdatemod.entity.LoadStage; +import i18nupdatemod.util.Log; import javax.swing.*; import java.awt.*; @@ -117,12 +118,12 @@ public static void hide() { } private void shutdown(){ + I18nUpdateMod.shouldShutdown = true; + Log.info("User shutdown task"); if (!useGUI) { - I18nUpdateMod.shouldShutdown = true; return; } hide(); - I18nUpdateMod.shouldShutdown = true; } public static void setStage(LoadStage stage) { From ffe7bc929aef2314109248b658e4b22817f23ac9 Mon Sep 17 00:00:00 2001 From: 502y <53784463+502y@users.noreply.github.com> Date: Fri, 28 Nov 2025 00:46:23 +0800 Subject: [PATCH 5/6] Apply suggestions from code review AI is so great Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/main/java/i18nupdatemod/I18nUpdateMod.java | 2 +- src/main/java/i18nupdatemod/core/I18nConfig.java | 2 +- src/main/java/i18nupdatemod/core/LoadDetailUI.java | 8 ++++---- src/main/java/i18nupdatemod/core/ResourcePack.java | 6 +++--- .../java/i18nupdatemod/core/ResourcePackConverter.java | 2 +- src/main/java/i18nupdatemod/entity/LoadStage.java | 4 ++-- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/main/java/i18nupdatemod/I18nUpdateMod.java b/src/main/java/i18nupdatemod/I18nUpdateMod.java index 32eff3b..4ccf429 100644 --- a/src/main/java/i18nupdatemod/I18nUpdateMod.java +++ b/src/main/java/i18nupdatemod/I18nUpdateMod.java @@ -105,7 +105,7 @@ public static void init(Path minecraftPath, String minecraftVersion, String load //Apply resource pack LoadDetailUI.setStage(LoadStage.APPLY_RESOURCE_PACK); - if (shouldShutdown){ + if (shouldShutdown) { return; } GameConfig config = new GameConfig(minecraftPath.resolve("options.txt")); diff --git a/src/main/java/i18nupdatemod/core/I18nConfig.java b/src/main/java/i18nupdatemod/core/I18nConfig.java index 7074083..63b0815 100644 --- a/src/main/java/i18nupdatemod/core/I18nConfig.java +++ b/src/main/java/i18nupdatemod/core/I18nConfig.java @@ -62,7 +62,7 @@ public static GameAssetDetail getAssetDetail(String minecraftVersion, String loa LoadDetailUI.appendLog("正在获取最快的镜像源..."); String assetRoot = getFastestUrl(); Log.debug("Using asset root: " + assetRoot); - LoadDetailUI.appendLog("即将从"+assetRoot+"下载资源包"); + LoadDetailUI.appendLog("即将从 " + assetRoot + " 下载资源包"); if (assetRoot.equals("https://raw.githubusercontent.com/")) { ret.downloads = createDownloadDetailsFromGit(convert, loader); diff --git a/src/main/java/i18nupdatemod/core/LoadDetailUI.java b/src/main/java/i18nupdatemod/core/LoadDetailUI.java index f90dbda..9ee8f99 100644 --- a/src/main/java/i18nupdatemod/core/LoadDetailUI.java +++ b/src/main/java/i18nupdatemod/core/LoadDetailUI.java @@ -56,10 +56,10 @@ public void windowClosing(WindowEvent e) { // 状态栏 statusBar = new JProgressBar(); - statusBar.setString("正在合并资源包"); + statusBar.setString(LoadStage.getDescription(LoadStage.INIT)); statusBar.setStringPainted(true); statusBar.setMaximum(LoadStage.values().length - 1); - statusBar.setValue(100); + statusBar.setValue(0); statusBar.setForeground(new Color(102, 255, 102)); panel.add(statusBar); panel.add(Box.createVerticalStrut(10)); @@ -106,7 +106,7 @@ public static void show() { if (!gui.useGUI || gui.frame == null) { return; } - gui.frame.setVisible(true); + SwingUtilities.invokeLater(() -> gui.frame.setVisible(true)); } public static void hide() { @@ -114,7 +114,7 @@ public static void hide() { if (!gui.useGUI || gui.frame == null) { return; } - gui.frame.setVisible(false); + SwingUtilities.invokeLater(() -> gui.frame.setVisible(false)); } private void shutdown(){ diff --git a/src/main/java/i18nupdatemod/core/ResourcePack.java b/src/main/java/i18nupdatemod/core/ResourcePack.java index d39cdd3..698dc11 100644 --- a/src/main/java/i18nupdatemod/core/ResourcePack.java +++ b/src/main/java/i18nupdatemod/core/ResourcePack.java @@ -41,14 +41,14 @@ public ResourcePack(String filename, boolean saveToGame) { public void checkUpdate(String fileUrl, String md5Url) throws IOException, URISyntaxException, NoSuchAlgorithmException { if (isUpToDate(md5Url)) { - LoadDetailUI.appendLog(filename + "无需更新"); + LoadDetailUI.appendLog(filename + " 无需更新"); Log.debug("Already up to date."); return; } //In this time, we can only download full file - LoadDetailUI.appendLog("正在下载" + filename); + LoadDetailUI.appendLog("正在下载 " + filename); downloadFull(fileUrl, md5Url); - LoadDetailUI.appendLog(filename + "下载完成"); + LoadDetailUI.appendLog(filename + " 下载完成"); //In the future, we will download patch file and merge local file } diff --git a/src/main/java/i18nupdatemod/core/ResourcePackConverter.java b/src/main/java/i18nupdatemod/core/ResourcePackConverter.java index 9e1ae6e..9d4928e 100644 --- a/src/main/java/i18nupdatemod/core/ResourcePackConverter.java +++ b/src/main/java/i18nupdatemod/core/ResourcePackConverter.java @@ -40,7 +40,7 @@ public void convert(int packFormat, String description) throws Exception { // zos.setMethod(ZipOutputStream.STORED); for (Path p : sourcePath) { Log.info("Converting: " + p); - LoadDetailUI.appendLog("正在转换" + p); + LoadDetailUI.appendLog("正在转换 " + p); try (ZipFile zf = new ZipFile(p.toFile(), StandardCharsets.UTF_8)) { for (Enumeration e = zf.entries(); e.hasMoreElements(); ) { ZipEntry ze = e.nextElement(); diff --git a/src/main/java/i18nupdatemod/entity/LoadStage.java b/src/main/java/i18nupdatemod/entity/LoadStage.java index b8a9c1b..048e09f 100644 --- a/src/main/java/i18nupdatemod/entity/LoadStage.java +++ b/src/main/java/i18nupdatemod/entity/LoadStage.java @@ -1,6 +1,6 @@ package i18nupdatemod.entity; -public enum LoadStage{ +public enum LoadStage { INIT(0), DOWNLOAD_ASSET(1), CONVERT_RESOURCE_PACK(2), @@ -18,7 +18,7 @@ public int getValue() { } public static String getDescription(LoadStage stage) { - switch (stage){ + switch (stage) { case INIT: return "初始化"; case DOWNLOAD_ASSET: From 5a688d21b2027590b334ee01e4c10741f7f81223 Mon Sep 17 00:00:00 2001 From: 502y <53784463+502y@users.noreply.github.com> Date: Fri, 28 Nov 2025 00:53:39 +0800 Subject: [PATCH 6/6] reformat code --- src/main/java/i18nupdatemod/I18nUpdateMod.java | 2 +- src/main/java/i18nupdatemod/core/LoadDetailUI.java | 2 +- src/main/java/i18nupdatemod/entity/LoadStage.java | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/i18nupdatemod/I18nUpdateMod.java b/src/main/java/i18nupdatemod/I18nUpdateMod.java index 4ccf429..0d48a09 100644 --- a/src/main/java/i18nupdatemod/I18nUpdateMod.java +++ b/src/main/java/i18nupdatemod/I18nUpdateMod.java @@ -92,7 +92,7 @@ public static void init(Path minecraftPath, String minecraftVersion, String load //Convert resourcepack LoadDetailUI.setStage(LoadStage.CONVERT_RESOURCE_PACK); - if (shouldShutdown){ + if (shouldShutdown) { return; } if (!convertNotNeed) { diff --git a/src/main/java/i18nupdatemod/core/LoadDetailUI.java b/src/main/java/i18nupdatemod/core/LoadDetailUI.java index 9ee8f99..63b4841 100644 --- a/src/main/java/i18nupdatemod/core/LoadDetailUI.java +++ b/src/main/java/i18nupdatemod/core/LoadDetailUI.java @@ -117,7 +117,7 @@ public static void hide() { SwingUtilities.invokeLater(() -> gui.frame.setVisible(false)); } - private void shutdown(){ + private void shutdown() { I18nUpdateMod.shouldShutdown = true; Log.info("User shutdown task"); if (!useGUI) { diff --git a/src/main/java/i18nupdatemod/entity/LoadStage.java b/src/main/java/i18nupdatemod/entity/LoadStage.java index 048e09f..31bd883 100644 --- a/src/main/java/i18nupdatemod/entity/LoadStage.java +++ b/src/main/java/i18nupdatemod/entity/LoadStage.java @@ -6,13 +6,13 @@ public enum LoadStage { CONVERT_RESOURCE_PACK(2), APPLY_RESOURCE_PACK(3), FINISH(4); - + private final int value; - + LoadStage(int value) { this.value = value; } - + public int getValue() { return value; }