From 13dbb4c57e10cef6dfcf5ae8134e6a3a0f00ca1e Mon Sep 17 00:00:00 2001 From: Josiah Glosson Date: Mon, 4 Aug 2025 12:21:37 -0700 Subject: [PATCH 1/3] Fix most packs showing as "Optimization" on the app homepage (#4119) --- apps/app-frontend/src/components/ui/ProjectCard.vue | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/apps/app-frontend/src/components/ui/ProjectCard.vue b/apps/app-frontend/src/components/ui/ProjectCard.vue index e78f3fb22..a31dc5ddc 100644 --- a/apps/app-frontend/src/components/ui/ProjectCard.vue +++ b/apps/app-frontend/src/components/ui/ProjectCard.vue @@ -21,14 +21,11 @@ const props = defineProps({ }) const featuredCategory = computed(() => { - if (props.project.categories.includes('optimization')) { + if (props.project.display_categories.includes('optimization')) { return 'optimization' } - if (props.project.categories.length > 0) { - return props.project.categories[0] - } - return undefined + return props.project.display_categories[0] ?? props.project.categories[0] }) const toColor = computed(() => { From 0657e4466f795fdae95a99b5f79ab33a2288ed28 Mon Sep 17 00:00:00 2001 From: Josiah Glosson Date: Mon, 4 Aug 2025 12:29:20 -0700 Subject: [PATCH 2/3] Allow direct joining servers on old instances (#4094) * Implement direct server joining for 1.6.2 through 1.19.4 * Implement direct server joining for versions before 1.6.2 * Ignore methods with a $ in them * Run intl:extract * Improve code of MinecraftTransformer * Support showing last played time for profiles before 1.7 * Reorganize QuickPlayVersion a bit to prepare for singleplayer * Only inject quick play checking in versions where it's needed * Optimize agent some and fix error on NeoForge * Remove some code for quickplay singleplayer support before 1.20, as we can't reasonably support that with an agent * Invert the default hasServerQuickPlaySupport return value * Remove Play Anyway button * Fix "Server couldn't be contacted" on singleplayer worlds * Fix "Jump back in" section not working --- .idea/code.iml | 3 +- apps/app-frontend/package.json | 2 +- .../src/components/ui/world/WorldItem.vue | 59 +++---- apps/app-frontend/src/helpers/worlds.ts | 15 +- .../app-frontend/src/locales/en-US/index.json | 8 +- .../src/pages/instance/Worlds.vue | 13 +- apps/app/src/api/profile.rs | 2 +- apps/app/src/api/worlds.rs | 10 +- packages/app-lib/build.rs | 1 + packages/app-lib/java/build.gradle.kts | 14 ++ .../modrinth/theseus/agent/InsnPattern.java | 45 +++++ .../theseus/agent/QuickPlayServerVersion.java | 12 ++ .../modrinth/theseus/agent/TheseusAgent.java | 85 +++++++++ .../transformers/ClassNodeTransformer.java | 20 +++ .../agent/transformers/ClassTransformer.java | 14 ++ .../transformers/MinecraftTransformer.java | 99 +++++++++++ packages/app-lib/src/api/mod.rs | 1 + packages/app-lib/src/api/profile/mod.rs | 7 +- packages/app-lib/src/api/server_address.rs | 166 ++++++++++++++++++ packages/app-lib/src/api/worlds.rs | 101 +---------- packages/app-lib/src/launcher/args.rs | 67 +++++-- packages/app-lib/src/launcher/mod.rs | 25 ++- .../src/launcher/quick_play_version.rs | 102 +++++++++++ packages/app-lib/src/state/process.rs | 63 +++++-- 24 files changed, 760 insertions(+), 174 deletions(-) create mode 100644 packages/app-lib/java/src/main/java/com/modrinth/theseus/agent/InsnPattern.java create mode 100644 packages/app-lib/java/src/main/java/com/modrinth/theseus/agent/QuickPlayServerVersion.java create mode 100644 packages/app-lib/java/src/main/java/com/modrinth/theseus/agent/TheseusAgent.java create mode 100644 packages/app-lib/java/src/main/java/com/modrinth/theseus/agent/transformers/ClassNodeTransformer.java create mode 100644 packages/app-lib/java/src/main/java/com/modrinth/theseus/agent/transformers/ClassTransformer.java create mode 100644 packages/app-lib/java/src/main/java/com/modrinth/theseus/agent/transformers/MinecraftTransformer.java create mode 100644 packages/app-lib/src/api/server_address.rs create mode 100644 packages/app-lib/src/launcher/quick_play_version.rs diff --git a/.idea/code.iml b/.idea/code.iml index aeca7f8c1..d44cfbf11 100644 --- a/.idea/code.iml +++ b/.idea/code.iml @@ -10,11 +10,10 @@ - - + \ No newline at end of file diff --git a/apps/app-frontend/package.json b/apps/app-frontend/package.json index b58e63553..d760df6d3 100644 --- a/apps/app-frontend/package.json +++ b/apps/app-frontend/package.json @@ -9,7 +9,7 @@ "tsc:check": "vue-tsc --noEmit", "lint": "eslint . && prettier --check .", "fix": "eslint . --fix && prettier --write .", - "intl:extract": "formatjs extract \"{,src/components,src/composables,src/helpers,src/pages,src/store}/**/*.{vue,ts,tsx,js,jsx,mts,cts,mjs,cjs}\" --ignore '**/*.d.ts' --ignore 'node_modules' --out-file src/locales/en-US/index.json --format crowdin --preserve-whitespace", + "intl:extract": "formatjs extract \"src/**/*.{vue,ts,tsx,js,jsx,mts,cts,mjs,cjs}\" --ignore \"**/*.d.ts\" --ignore node_modules --out-file src/locales/en-US/index.json --format crowdin --preserve-whitespace", "test": "vue-tsc --noEmit" }, "dependencies": { diff --git a/apps/app-frontend/src/components/ui/world/WorldItem.vue b/apps/app-frontend/src/components/ui/world/WorldItem.vue index 72f710592..e5e14cb12 100644 --- a/apps/app-frontend/src/components/ui/world/WorldItem.vue +++ b/apps/app-frontend/src/components/ui/world/WorldItem.vue @@ -6,9 +6,8 @@ import type { ServerWorld, SingleplayerWorld, World, - set_world_display_status, - getWorldIdentifier, } from '@/helpers/worlds.ts' +import { set_world_display_status, getWorldIdentifier } from '@/helpers/worlds.ts' import { formatNumber, getPingLevel } from '@modrinth/utils' import { useRelativeTime, @@ -61,7 +60,8 @@ const props = withDefaults( playingInstance?: boolean playingWorld?: boolean startingInstance?: boolean - supportsQuickPlay?: boolean + supportsServerQuickPlay?: boolean + supportsWorldQuickPlay?: boolean currentProtocol?: ProtocolVersion | null highlighted?: boolean @@ -85,7 +85,8 @@ const props = withDefaults( playingInstance: false, playingWorld: false, startingInstance: false, - supportsQuickPlay: false, + supportsServerQuickPlay: true, + supportsWorldQuickPlay: false, currentProtocol: null, refreshing: false, @@ -128,9 +129,13 @@ const messages = defineMessages({ id: 'instance.worlds.a_minecraft_server', defaultMessage: 'A Minecraft Server', }, - noQuickPlay: { - id: 'instance.worlds.no_quick_play', - defaultMessage: 'You can only jump straight into worlds on Minecraft 1.20+', + noServerQuickPlay: { + id: 'instance.worlds.no_server_quick_play', + defaultMessage: 'You can only jump straight into servers on Minecraft Alpha 1.0.5+', + }, + noSingleplayerQuickPlay: { + id: 'instance.worlds.no_singleplayer_quick_play', + defaultMessage: 'You can only jump straight into singleplayer worlds on Minecraft 1.20+', }, gameAlreadyOpen: { id: 'instance.worlds.game_already_open', @@ -152,10 +157,6 @@ const messages = defineMessages({ id: 'instance.worlds.view_instance', defaultMessage: 'View instance', }, - playAnyway: { - id: 'instance.worlds.play_anyway', - defaultMessage: 'Play anyway', - }, playInstance: { id: 'instance.worlds.play_instance', defaultMessage: 'Play instance', @@ -330,17 +331,24 @@ const messages = defineMessages({