Conversation
There was a problem hiding this comment.
Pull request overview
This PR adds a download progress window for the I18n mod, providing users with visual feedback during resource pack download and installation operations.
Key changes:
- Introduces a Swing-based GUI window (
LoadDetailUI) that displays download progress, logs, and allows users to cancel operations - Implements stage tracking through the
LoadStageenum to monitor progress through initialization, download, conversion, and application phases - Integrates logging throughout the download workflow to keep users informed
Reviewed changes
Copilot reviewed 6 out of 9 changed files in this pull request and generated 14 comments.
Show a summary per file
| File | Description |
|---|---|
| src/main/java/i18nupdatemod/core/LoadDetailUI.java | New Swing GUI window for displaying download progress with progress bar, log area, and cancel functionality |
| src/main/java/i18nupdatemod/entity/LoadStage.java | New enum defining five stages of the loading process with descriptions |
| src/main/java/i18nupdatemod/I18nUpdateMod.java | Integrated LoadDetailUI display and shutdown checks at key points in the init workflow |
| src/main/java/i18nupdatemod/core/I18nConfig.java | Added log messages when fetching mirror sources |
| src/main/java/i18nupdatemod/core/ResourcePack.java | Added log messages for download status and completion |
| src/main/java/i18nupdatemod/core/ResourcePackConverter.java | Added log message during resource pack conversion |
| build.gradle.kts | Modified resource processing to handle JSON files separately from mod.json files |
| src/main/resources/icons/CFPA.png | New icon resource for the window |
| src/main/resources/icons/CFPA_with_title.png | New icon resource with title |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
AI is so great Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
|
feat: 出现错误时由手动关闭改为5s后自动关闭 或者5s后自动重试,同时显示停止按钮避免一直循环。 |
自动关闭做好了,个人体感5s略短,改成了6秒。异步重试我想想 |
|
是我的问题吗,拉到本地看了一下并没有出现gui |
|
该 feat 在 1.21.1 neoforge 确认可以生效 |
我怀疑和JDK有关,我本地的Zulu 8的java.awt.headless是true,但是通过设置环境变量强制改为false又能够正常显示GUI。强制修改环境变量会在真的headless的JDK上面抛出异常(虽然我猜能运行MC客户端的JDK应该都不是无头),所以目前是这么放着了。 |
我用的是Zulu JDK 21 |
晚上我看看能不能复现 |
版本 1.21.1 fabric |
已复现,JDK默认为无头状态,修改"java.awt.headless"属性可显示。我比较担心改成纯客户端模组也会有玩家的JDK是真无头。 |
This comment was marked as resolved.
This comment was marked as resolved.
|
还是没有 |
|
@WingChunWong 方便压缩一份JDK发送给我吗 |
This comment has been minimized.
This comment has been minimized.
@WingChunWong 已复现。原因为MC启动时会主动设置为无头模式,导致命令行参数无效。我之前是直接在Mod 初始化代码里修改的headless属性,比Minecraft修改的时间晚。JavaAgent代码和日志见下方。 日志[HeadlessSpy] premain [HeadlessSpy] initial java.awt.headless = false [HeadlessSpy] SpyProperties installed [01:10:48] [main/INFO]: Loading Minecraft 1.21.1 with Fabric Loader 0.18.4 [01:10:48] [main/INFO]: Loading 5 mods: - fabricloader 0.18.4 \-- mixinextras 0.5.0 - i18nupdatemod 3.7.0-SNAPSHOT - java 21 - minecraft 1.21.1 [01:10:48] [main/INFO]: SpongePowered MIXIN Subsystem Version=0.8.7 Source=file:/C:/Users/13238.YUE_CD_DT/AppData/Roaming/PrismLauncher/libraries/net/fabricmc/sponge-mixin/0.17.0+mixin.0.8.7/sponge-mixin-0.17.0+mixin.0.8.7.jar Service=Knot/Fabric Env=CLIENT [HeadlessSpy] setProperty java.awt.headless = true [HeadlessSpy] put java.awt.headless = true [01:10:50] [Datafixer Bootstrap/INFO]: 226 Datafixer optimizations took 477 milliseconds [01:10:55] [Render thread/INFO]: Environment: Environment[sessionHost=https://sessionserver.mojang.com, servicesHost=https://api.minecraftservices.com, name=PROD] [01:10:55] [Render thread/INFO]: Setting user: 502y [2026-04-05 01:10:55] [INFO]: I18nUpdate Mod 3.7.0-SNAPSHOT is loaded in 1.21.1 with Fabric [2026-04-05 01:10:55] [INFO]: Using fastest url: http://8.137.167.65:64684/ [2026-04-05 01:10:55] [INFO]: Converting: C:\Users\13238.YUE_CD_DT\AppData\Local\.i18nupdatemod\1.21\Minecraft-Mod-Language-Modpack-1-21-Fabric.zip [2026-04-05 01:10:56] [INFO]: Converting: C:\Users\13238.YUE_CD_DT\AppData\Local\.i18nupdatemod\1.20\Minecraft-Mod-Language-Modpack-1-20-Fabric.zip [2026-04-05 01:10:56] [INFO]: Converting: C:\Users\13238.YUE_CD_DT\AppData\Local\.i18nupdatemod\1.19\Minecraft-Mod-Language-Modpack-1-19.zip [2026-04-05 01:10:56] [INFO]: Converted: [C:\Users\13238.YUE_CD_DT\AppData\Local\.i18nupdatemod\1.21\Minecraft-Mod-Language-Modpack-1-21-Fabric.zip, C:\Users\13238.YUE_CD_DT\AppData\Local\.i18nupdatemod\1.20\Minecraft-Mod-Language-Modpack-1-20-Fabric.zip, C:\Users\13238.YUE_CD_DT\AppData\Local\.i18nupdatemod\1.19\Minecraft-Mod-Language-Modpack-1-19.zip] -> C:\Users\13238.YUE_CD_DT\AppData\Local\.i18nupdatemod\1.21.1\Minecraft-Mod-Language-Modpack-Converted-1.21.1.zip [2026-04-05 01:10:56] [INFO]: Synchronized: C:\Users\13238.YUE_CD_DT\AppData\Local\.i18nupdatemod\1.21.1\Minecraft-Mod-Language-Modpack-Converted-1.21.1.zip -> D:\Games\PrismLauncher\instances\1.21.1\minecraft\resourcepacks\Minecraft-Mod-Language-Modpack-Converted-1.21.1.zip [01:10:56] [Render thread/INFO]: Backend library: LWJGL version 3.3.3-snapshot [01:10:57] [Render thread/INFO]: Reloading ResourceManager: vanilla, file/Minecraft-Mod-Language-Modpack-Converted-1.21.1.zip [01:10:58] [Worker-Main-1/INFO]: Found unifont_all_no_pua-15.1.05.hex, loading [01:10:58] [Worker-Main-18/INFO]: Found unifont_jp_patch-15.1.05.hex, loading [01:11:00] [Render thread/WARN]: Missing sound for event: minecraft:item.goat_horn.play [01:11:00] [Render thread/WARN]: Missing sound for event: minecraft:entity.goat.screaming.horn_break [01:11:00] [Render thread/INFO]: OpenAL initialized on device OpenAL Soft on 扬声器 (Redmi 电脑音箱) [01:11:00] [Render thread/INFO]: Sound engine started [01:11:00] [Render thread/INFO]: Created: 1024x512x4 minecraft:textures/atlas/blocks.png-atlas [01:11:00] [Render thread/INFO]: Created: 256x256x4 minecraft:textures/atlas/signs.png-atlas [01:11:00] [Render thread/INFO]: Created: 512x512x4 minecraft:textures/atlas/banner_patterns.png-atlas [01:11:00] [Render thread/INFO]: Created: 512x512x4 minecraft:textures/atlas/shield_patterns.png-atlas [01:11:00] [Render thread/INFO]: Created: 1024x1024x4 minecraft:textures/atlas/armor_trims.png-atlas [01:11:00] [Render thread/INFO]: Created: 128x64x4 minecraft:textures/atlas/decorated_pot.png-atlas [01:11:00] [Render thread/INFO]: Created: 256x256x4 minecraft:textures/atlas/chest.png-atlas [01:11:00] [Render thread/INFO]: Created: 512x256x4 minecraft:textures/atlas/shulker_boxes.png-atlas [01:11:00] [Render thread/INFO]: Created: 512x256x4 minecraft:textures/atlas/beds.png-atlas java.lang.Exception: Stack trace at java.base/java.lang.Thread.dumpStack(Thread.java:2210) at HeadlessSpyAgent$SpyProperties.setProperty(HeadlessSpyAgent.java:25) at java.base/java.lang.System.setProperty(System.java:1051) at knot//net.minecraft.client.main.Main.(Main.java:56) at java.base/jdk.internal.misc.Unsafe.ensureClassInitialized0(Native Method) at java.base/jdk.internal.misc.Unsafe.ensureClassInitialized(Unsafe.java:1160) at java.base/java.lang.invoke.DirectMethodHandle.checkInitialized(DirectMethodHandle.java:383) at java.base/java.lang.invoke.DirectMethodHandle.ensureInitialized(DirectMethodHandle.java:371) at java.base/java.lang.invoke.DirectMethodHandle.internalMemberNameEnsureInit(DirectMethodHandle.java:336) at net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider.launch(MinecraftGameProvider.java:514) at net.fabricmc.loader.impl.launch.knot.Knot.launch(Knot.java:72) at net.fabricmc.loader.impl.launch.knot.KnotClient.main(KnotClient.java:23) at org.prismlauncher.launcher.impl.StandardLauncher.launch(StandardLauncher.java:105) at org.prismlauncher.EntryPoint.listen(EntryPoint.java:129) at org.prismlauncher.EntryPoint.main(EntryPoint.java:70) java.lang.Exception: Stack trace at java.base/java.lang.Thread.dumpStack(Thread.java:2210) at HeadlessSpyAgent$SpyProperties.put(HeadlessSpyAgent.java:34) at java.base/java.util.Properties.setProperty(Properties.java:230) at HeadlessSpyAgent$SpyProperties.setProperty(HeadlessSpyAgent.java:27) at java.base/java.lang.System.setProperty(System.java:1051) at knot//net.minecraft.client.main.Main.(Main.java:56) at java.base/jdk.internal.misc.Unsafe.ensureClassInitialized0(Native Method) at java.base/jdk.internal.misc.Unsafe.ensureClassInitialized(Unsafe.java:1160) at java.base/java.lang.invoke.DirectMethodHandle.checkInitialized(DirectMethodHandle.java:383) at java.base/java.lang.invoke.DirectMethodHandle.ensureInitialized(DirectMethodHandle.java:371) at java.base/java.lang.invoke.DirectMethodHandle.internalMemberNameEnsureInit(DirectMethodHandle.java:336) at net.fabricmc.loader.impl.game.minecraft.MinecraftGameProvider.launch(MinecraftGameProvider.java:514) at net.fabricmc.loader.impl.launch.knot.Knot.launch(Knot.java:72) at net.fabricmc.loader.impl.launch.knot.KnotClient.main(KnotClient.java:23) at org.prismlauncher.launcher.impl.StandardLauncher.launch(StandardLauncher.java:105) at org.prismlauncher.EntryPoint.listen(EntryPoint.java:129) at org.prismlauncher.EntryPoint.main(EntryPoint.java:70) [01:11:00] [Render thread/INFO]: Created: 512x256x0 minecraft:textures/atlas/particles.png-atlas [01:11:00] [Render thread/INFO]: Created: 512x256x0 minecraft:textures/atlas/paintings.png-atlas [01:11:00] [Render thread/INFO]: Created: 256x128x0 minecraft:textures/atlas/mob_effects.png-atlas [01:11:00] [Render thread/INFO]: Created: 64x64x0 minecraft:textures/atlas/map_decorations.png-atlas [01:11:00] [Render thread/INFO]: Created: 1024x512x0 minecraft:textures/atlas/gui.png-atlas [01:11:00] [Render thread/WARN]: Shader rendertype_entity_translucent_emissive could not find sampler named Sampler2 in the specified shader program. 游戏被用户强行关闭。Java Agent``` |
|
这下更得想想这个headless咋设置了…… |
No description provided.