Repository navigation
Releases: xyrz47-spec/Poly-Mod-Loader
Release list
Poly Mod Loader 0.2.0-beta.2
Minecraft: 26.1, 26.1.1, 26.1.2, 26.2
Highlights
- Quilt mods (experimental, Minecraft 26.2): Poly Mod Loader now reads
quilt.mod.jsonwith Quilt Loader's rules and runs Quilt mods with the Quilt Loader API, their Mixins and access wideners, next to Fabric mods and Poly Mods. Checked with Simple Voice Chat's Quilt build. Mods that need Quilt Standard Libraries (QSL) are left out with the reason, because QSL has no release for Minecraft 26.x. - NeoForge preview (still experimental and off by default): a NeoForge mod that NeoForge would refuse is now left out with the reason instead of stopping the launch, and more real mods run, such as mods that need Kotlin for Forge or YACL, and Lithium.
- The title screen and the log count Quilt mods on their own line.
주요 변경
- Quilt 모드(실험, Minecraft 26.2): 이제
quilt.mod.json을 Quilt Loader 규칙대로 읽고, Quilt 모드를 Quilt Loader API, Mixin, access widener와 함께 Fabric 모드·Poly 모드 옆에서 실행합니다. Simple Voice Chat의 Quilt 빌드로 확인했습니다. Quilt 표준 라이브러리(QSL)가 필요한 모드는 이유와 함께 빠집니다. QSL은 Minecraft 26.x 판이 없기 때문입니다. - NeoForge 미리보기(여전히 실험이고 기본값은 꺼짐): NeoForge가 거부할 NeoForge 모드는 실행 전체를 멈추는 대신 이유와 함께 빠집니다. Kotlin for Forge나 YACL이 필요한 모드, Lithium 같은 실제 모드가 더 실행됩니다.
- 타이틀 화면과 로그에 Quilt 모드 수가 따로 표시됩니다.
Full changes
Quilt (ADR-0027)
quilt.mod.jsonis read as Quilt Loader 0.31 reads it (QuiltModJsonReader): a bare version such as1.0.0means^1.0.0,optionaldependencies are checked only when that mod is installed,any/allgroups andunless,provideswith versions,breaks. Nested mods inquilt_loader.jarsload like Fabric nested jars; a nested mod withload_typeif_requiredthat no loaded mod requires is left out (POLY-COMPAT-307), as under Quilt Loader.- The Quilt Loader API (
org.quiltmc.loader.api, from Quilt Loader 0.31.0-beta.4) is packed into the Fabric bridge jar, with Poly's ownQuiltLoaderImpl,GameProviderandDefaultLanguageAdapter.QuiltLoadersees every loaded mod of every loader as aModContainer. Quilt Loader internals that are not packed are blocked by the link check (POLY-COMPAT-111). - Entrypoints
pre_launch(before everypreLaunch),main,clientandserverrun; Fabric and Quilt mods share one entrypoint store. QSL'sinit,client_initandserver_initare not run (303), as under Quilt Loader without QSL. - Quilt mods' Mixin configurations join the one Mixin (compatibility level 0.10.0), every
access_widenerentry applies, and@ClientOnly,@DedicatedServerOnlyand@Requiresstrip Quilt mods' classes as Quilt Loader does. - A jar with both
fabric.mod.jsonandquilt.mod.jsonruns as a Fabric mod (310), so jars that already ran keep running. - New codes
POLY-COMPAT-300–310: invalidquilt.mod.json(300), loader plugins (301), language adapters (302), QSL entrypoints (303), other entrypoints (304), environment (305), the modifiable file system overlay (306), unused nested mods (307), QSL or Quilted Fabric API dependencies (308, with114), fields with no effect (309), jars with both metadata files (310). - Forge's mod list shows a Quilt mod's name from
quilt.mod.json. The log line is nowLoaded mods per loader: N Poly, N Fabric, N Quilt, N Forge, and the title screen has a "Quilt mods" line (English and Korean). - Quilt Loader's licence (Apache-2.0) is in
THIRD_PARTY_NOTICES.md.
NeoForge (experimental, -Dpoly.neoforge=on)
- A NeoForge mod that FML 11 would refuse is left out before FML starts, with the mods that need it (
POLY-COMPAT-217): thejavafmlloader version, a missing or left-out required mod, a version outside a declared range, an installed incompatible mod. - Jars with
neoforge.mods.tomlbesidesfabric.mod.json(Collective, Iris, Zoomify) go to NeoForge when NeoForge runs, as NeoForge reads only its own metadata. - The game class loader falls back to FML's plugin libraries last, as FML's class loader does (Kotlin for Forge's standard library, YACL's nested libraries), and classes that FML's class processors generate (Mixin's for Lithium) are defined.
- Other loaders' mod lists include the mods FML runs.
Install: on Windows run PolyModLoader-0.2.0-beta.2.exe; elsewhere run PolyModLoader-0.2.0-beta.2.jar (Java 17 or newer).
설치: Windows는 PolyModLoader-0.2.0-beta.2.exe, 그 밖에는 PolyModLoader-0.2.0-beta.2.jar(Java 17 이상)를 실행합니다.
NOT AN OFFICIAL MINECRAFT PRODUCT. NOT APPROVED BY OR ASSOCIATED WITH MOJANG OR MICROSOFT.
Poly Mod Loader 0.2.0-beta.1
Minecraft: 26.1, 26.1.1, 26.1.2, 26.2
Highlights
- Beta: MinecraftForge mods are fully supported on Minecraft 26.1, 26.1.2 and 26.2, checked with real popular Forge mods on the client, the game test server, the dedicated server and installed profiles.
- NeoForge preview (experimental, off by default): with
-Dpoly.neoforge=on, Poly Mod Loader runs NeoForge's own loader (NeoForge 26.2.0.93) and loads NeoForge mods with it. Without it, NeoForge mods are left out as before.
주요 변경
- 베타: Minecraft 26.1, 26.1.2, 26.2에서 MinecraftForge 모드를 완전히 지원합니다. 실제 인기 Forge 모드로 클라이언트, 게임 테스트 서버, 전용 서버, 설치한 프로필에서 확인했습니다.
- NeoForge 미리보기(실험, 기본값은 꺼짐):
-Dpoly.neoforge=on을 주면 Poly 모드 로더가 NeoForge 자신의 로더(NeoForge 26.2.0.93)를 실행해 NeoForge 모드를 로드합니다. 켜지 않으면 지금처럼 NeoForge 모드는 빠집니다.
Full changes
Mod SDK repository
- The mod plugin's SDK repository (
PolyModPlugin.SDK_REPOSITORY_URL), the mod template and the Crystal Garden example usehttps://www.polymc.net/maven/.
NeoForge on Poly Mod Loader, experimental (ADR-0026, N0-N3)
- The game jar with NeoForge's patches is built on the player's PC from the installer's
NFPATCHBUNDLE001bundle (NeoForgePatchBundle); for NeoForge 26.2.0.93 and 26.1.2.122, client and server, every file is byte-identical to what NeoForge's installer makes. - With
-Dpoly.neoforge=onand NeoForge mods,NeoForgeGameHostdownloads NeoForge's files (pinned installer SHA-1,neoforge-releases.properties), defines NeoForge's loader libraries as modules of the game class loader and runs FML's ownFMLLoader.create. Two checked calls ofFMLLoaderare replaced (NeoForgeLoaderPatch): the game class loader defines FML's game layer, and FML loads the NeoForge mods Poly Mod Loader found instead of scanning the mods folder. FML's class processors (access transformers, enum extension, Mixin) run in the bridge stage. - Poly Mod Loader's Java agent now also opens
java.lang.invoketo NeoForge's modules, as NeoForge's own launcher profile does with--add-opens(JdkModuleAccess). - On a dedicated server, NeoForge, a NeoForge test mod and a Poly Mod start up to the EULA check. Not yet: NeoForge with Fabric mods (NeoForge's mods are left out then), the client, 26.1, NeoForge's own game test server (it does not start Mojang's test under NeoForge's own launcher either).
- New codes:
POLY-COMPAT-215(NeoForge'sFMLLoaderis not the checked code; the launch stops),POLY-COMPAT-216(NeoForge cannot run in this launch; its mods are left out).
Install: on Windows run PolyModLoader-0.2.0-beta.1.exe; elsewhere run PolyModLoader-0.2.0-beta.1.jar (Java 17 or newer).
설치: Windows는 PolyModLoader-0.2.0-beta.1.exe, 그 밖에는 PolyModLoader-0.2.0-beta.1.jar(Java 17 이상)를 실행합니다.
NOT AN OFFICIAL MINECRAFT PRODUCT. NOT APPROVED BY OR ASSOCIATED WITH MOJANG OR MICROSOFT.
Poly Mod Loader 0.1.0-alpha.18
Minecraft: 26.1, 26.1.1, 26.1.2, 26.2
Highlights
- Forge, Fabric and Poly mods see each other: Forge mods find Fabric and Poly mods through FML's
ModList, Fabric mods find Forge mods throughFabricLoader, and Poly Mods find every loader's mods through the newModContext.mods(). Physics Mod (Forge) with Sodium (Fabric) now draws block debris and ragdolls. - With Fabric API and Forge together, crafting works again (it failed on every crafting remainder), Fabric data behind resource conditions no longer stops the data pack from loading, and Fabric's block breaking events fire.
- The title screen shows how many mods each loader loaded, in the bottom-left corner above the game version: "Poly mods: 2", "Fabric mods: 14", "Forge mods: 3", in the game's language (English and Korean so far). With Forge mods, the lines go above Forge's own branding lines.
- With Forge, more of Fabric API works: its networking and recipe APIs' server connection access, tag files that remove entries with
fabric:remove(next to Forge's ownremove), and the data generation advancement builder. Fabric API's default attribute changes (FabricDefaultAttributeRegistry.MODIFY) still do not work with Forge, and now say why instead of crashing with aClassCastException. - Forge and Fabric mods together now also run on Minecraft 26.1 in our tests, and the 26.1 Forge client and a server installed for 26.1.2 run too.
주요 변경
- Forge·Fabric·Poly 모드가 서로를 봅니다. Forge 모드는 FML
ModList로 Fabric·Poly 모드를, Fabric 모드는FabricLoader로 Forge 모드를, Poly 모드는 새ModContext.mods()로 모든 로더의 모드를 확인합니다. 그래서 Physics Mod(Forge)와 Sodium(Fabric)을 함께 넣어도 블록 파편과 래그돌이 제대로 나옵니다. - Fabric API와 Forge를 함께 넣으면 조합이 다시 됩니다(남는 아이템마다 실패했음). 리소스 조건 뒤의 Fabric 데이터가 더는 데이터 팩 로딩을 멈추지 않고, Fabric의 블록 부수기 이벤트가 실행됩니다.
- 타이틀 화면 왼쪽 아래, 게임 버전 위에 로더별로 로드한 모드 수가 나옵니다("Poly 모드: 2개", "Fabric 모드: 14개", "Forge 모드: 3개"). 게임 언어를 따르며 지금은 영어와 한국어가 있습니다. Forge 모드가 있으면 Forge의 브랜딩 줄 위에 나옵니다.
- Forge와 함께 쓸 때 Fabric API가 더 많이 동작합니다. 네트워킹·레시피 API의 서버 연결 접근,
fabric:remove로 항목을 빼는 태그 파일(Forge의remove와 함께), 데이터 생성의 발전 과제 빌더가 됩니다. Fabric API의 기본 속성 변경(FabricDefaultAttributeRegistry.MODIFY)은 Forge와 함께 여전히 동작하지 않지만, 이제ClassCastException으로 멈추지 않고 이유를 알려 줍니다. - 시험에서 Minecraft 26.1에서도 Forge와 Fabric 모드가 함께 실행되고, 26.1 Forge 클라이언트와 26.1.2용으로 설치한 서버도 실행됩니다.
Full changes
Forge and Fabric on 26.1, the 26.1 Forge client and installed server (2026-10-23, Forge full support B2, B6)
- Fixed: with Fabric mods, a Forge mod whose classes carry Fabric's
@Environment(CLIENT)(a mod built from code shared with its Fabric build, such as No Chat Reports for Forge) stopped the server with "Cannot load class ... in environment type SERVER". Fabric's environment stripping now leaves the classes of the mods Forge runs alone, as Forge ignores those annotations.corpusFabricForgenow passes on 26.1 too - Known side effect of ADR-0025: Balm for Forge now sees the Fabric mod
fabric-permissions-api-v0and tries its Fabric integration class, which its Forge build does not have; Balm logs the error and goes on corpusForgeClientpasses on 26.1 (Forge 62.0.9): the saved world opens, 200 ticks, save and quit. Cherished Worlds 16.0.1+26.1.2 is left out of the corpus runs: Forge's own EventBus refuses its single-listener class, so real Forge fails the same wayserverInstallTest -PserverInstallMinecraft=<version>installs and starts any supported version; on 26.1.2 Forge 64.1.5 runs on the game test server and the dedicated server. Its first phase no longer mistakes the mod counts line ("0 Forge") for Forge running
Fabric mixins that meet members Forge's patch added or changed (2026-10-23, ADR-0021 G8)
- Four Fabric API mixins were dropped whole with Forge (
POLY-COMPAT-138"does not apply to the game"), because Forge's patch adds or changes a member the mixin also adds or uses. The target class then did not implement the mixin's interface, so Fabric code casting to it would have thrownClassCastException. Mixin also skips every other mixin of a class once one fails, so fabric-recipe-api-v1's accessor on the same class went with it, without a message. Each case was checked withjavapon Forge 26.2-65.1.5's patched classes and Fabric API 0.161.0 - New rules, decided before Mixin starts by comparing the vanilla and the patched class (
HostAddedMembers,HostRenamedLocals, unit tests inHostPatchAdjustmentsTest):- An
@Accessoror@Invokerwhose method the patch added as a public method with exactly the accessor's code: Mixin does not generate it and the patched method serves it (ServerCommonPacketListenerImpl.getConnection()returns fieldconnection, for fabric-networking-api-v1 and fabric-recipe-api-v1). The same method added with other code leaves the mixin out when its configuration requires@Overwrite; otherwise Mixin replaces the patched method, as before, and that is now reported (POLY-COMPAT-213; architectury'sLiquidBlockAccessor.getFluid()replaces Forge'sLiquidBlock.getFluid(), which Forge's supplier-built liquid blocks need) - A method a mixin adds that the patch also added with the same instructions stays the patched class's (
Advancement$Builder.save(Consumer, Identifier), fabric-data-generation-api-v1). With other code, the mixin's method gets its own name (poly$<mixin>$<name>) and the calls in the same mod's mixins follow it (TagFile.remove(): Forge's list from"remove", Fabric's from"fabric:remove"; fabric-tag-api-v1'sTagLoaderMixinnow reads Fabric's). Other code calling that name, also through Fabric'sFabricTagFileinterface, reaches Forge's method (POLY-COMPAT-213) - An
@Accessorof a field whose type the patch changed (AttributeSupplier$Builder.builder,ImmutableMap.Builderin vanilla,Mapwith Forge): no accessor of the old type can exist. The rest of the mixin applies, so the cast works, and calling the accessor throwsPOLY-COMPAT-214, which names the field and both types.FabricDefaultAttributeRegistry.MODIFYuses it and does not work with Forge;FabricDefaultAttributeRegistry.registerdoes not use it - A MixinExtras
@Local(name = ...)whose local the patch renamed, in the same slot and with a type the parameter accepts, captures it under the patched name and type. Forge renamesSequencedSet valuestoLinkedHashSet builderinTagLoader.tryBuildTag, where fabric-tag-api-v1 removes entries; Mixin finds a local by name only with the parameter's exact type, and under Forge every injector is optional, so that removal silently did not run. A local no single local replaces is reported (POLY-COMPAT-138), unless the injection is already reported as not running
- An
- New test mod
fabric-host-patch-probeincorpusFabricForge: it casts a server packet listener to Fabric's networking accessor and calls it, loads a tag with Forge'sremoveand Fabric'sfabric:remove(onlyminecraft:stoneof stone, dirt and sand stays), calls the attribute builder accessor, and checks the advancement builder. The scenario's mod count is now 91 corpusFabricForge(26.2):POLY-COMPAT-138lines 33 → 30; whole-mixin failures 4 → 0. The 30 left are injections whose call or field Forge's patch moved or removed (29) and the attribute builder accessor above- New codes:
POLY-COMPAT-212(a Fabric mixin adjusted to the patched class and working as written; logged at INFO),POLY-COMPAT-213(a Fabric mixin method and a patched method share a name and descriptor with other code: renamed, or replaced by Mixin),POLY-COMPAT-214(a Fabric accessor that cannot work on the patched game was called)
Fabric API under Forge: block breaking events, resource conditions, crafting (2026-10-23, ADR-0021 G8)
- Crafting failed with Fabric API and Forge together: every call of
ItemStack.getCraftingRemainder()(the crafting grid, furnace fuel, brewing) threwIncompatibleClassChangeError: Conflicting default methods, because Fabric API'sFabricItemStackand Forge'sIForgeItemStackboth giveItemStackthat default method (andFabricItem/IForgeItemgiveItemgetCraftingRemainder(ItemStack)). Before Mixin starts, a Fabric mixin that adds such an interface now gets a method that calls the host's default; both defaults do the vanilla thing, and an item that overrides the method (Fabric or Forge) still wins. Reported withPOLY-COMPAT-138 - A data file behind a Fabric resource condition that is not met (
fabric:load_conditions) stopped the whole data pack from loading under Forge ("Failed to load vanilla datapack",ClassCastException): Forge's patch reordered the parameters ofSimpleJsonResourceReloadListener.lambda$scanDirectory$0, so Fabric API'sskipDatawas taken out and its skip marker became a recipe. An@Injectwhose target's parameters the patch reordered (each type once) now gets the same bridge as one whose target only gained parameters - Fabric API's
PlayerBlockBreakEventsBEFORE, AFTER and CANCELED now fire under Forge (survival and creative, with the block entity). Forge's patch movesBlock.playerWillDestroyandBlock.destroyfromServerPlayerGameMode.destroyBlockinto its newremoveBlock(BlockPos, boolean). The Forge bridge now says how each moved point stands (InjectionPointReplacement.Placement): BEFORE runs at the first call after the same permission checks (ServerPlayer.preventsBlockDrops()), and AFTER runs after eachremoveBlockcall that removed the block, through a generated MixinExtras@WrapOperation(AFTER_TRUE_RESULT). The Fabric bridge checks that the patched classes have that shape before it moves anything (26.2-65.1.5 and 26.1-62.0.9 checked) - An injector bound to the call itself (
@Redirect,@WrapOperationand the like) now moves to a host's replacement only when that call has the same owner and descriptor - New check scenarios
fabricApiGameTestandforgeFabricApiGameTest(part ofcompatibilityCorpus, 26.2): the test modfabric-api-eventsuses real Fabric AP...
Poly Mod Loader 0.1.0-alpha.17
Minecraft: 26.1, 26.1.1, 26.1.2, 26.2
Highlights
- Fixed a crash on the first frame when Sodium (Fabric) and a Forge mod such as Physics Mod are installed together.
- When Forge changes a game method that a Fabric mod hooks into, Poly Mod Loader now adapts the hook if Forge only added parameters, instead of losing other mods' changes to the same class.
- Forge mods now also run together on Minecraft 26.1 in our test (a world is created, tested and saved).
주요 변경
- Sodium(Fabric)과 Physics Mod 같은 Forge 모드를 함께 넣으면 첫 화면에서 튕기던 문제를 고쳤습니다.
- Fabric 모드가 연결하는 게임 메서드를 Forge가 바꿨을 때, Forge가 매개변수만 더한 경우에는 그 연결을 맞춰 줍니다. 더 이상 같은 클래스에 붙는 다른 모드의 변경까지 사라지지 않습니다.
- 시험에서 Minecraft 26.1에서도 Forge 모드 묶음이 함께 실행됩니다(월드 생성, 게임 테스트, 저장).
Full changes
Fabric mods whose injections Forge's patches changed (2026-10-23, ADR-0021 G8)
- Sodium with a Forge mod (Physics Mod) crashed on the first frame with a
ClassCastException(LevelExtractorcannot be cast to Fabric API'sLevelRendererExtensions). Forge patchesLevelExtractor.extractVisibleBlockEntitiesto take one more parameter (Frustum); Sodium injects there with the vanilla parameters, Mixin rejected that handler ("Invalid descriptor"), and the failure took the other mods' mixins on the same class, Fabric API's among them, with it - Before Mixin starts, an
@Injectwhose target method Forge's patch gave more parameters now runs through a bridge with the patched parameters that passes the handler the ones it was written for (POLY-COMPAT-138says so). When the patch changed parameters instead, only that injection is taken out and reported; the other mixins of the class still apply forgeSodiumClient(opens a window): Sodium and Physics Mod from the corpus enter a saved world on the client, play 200 ticks, save and quit
Install: on Windows run PolyModLoader-0.1.0-alpha.17.exe; elsewhere run PolyModLoader-0.1.0-alpha.17.jar (Java 17 or newer).
설치: Windows는 PolyModLoader-0.1.0-alpha.17.exe, 그 밖에는 PolyModLoader-0.1.0-alpha.17.jar(Java 17 이상)를 실행합니다.
NOT AN OFFICIAL MINECRAFT PRODUCT. NOT APPROVED BY OR ASSOCIATED WITH MOJANG OR MICROSOFT.
Poly Mod Loader 0.1.0-alpha.16
Minecraft: 26.1, 26.1.1, 26.1.2, 26.2
Highlights
- Forge mods now work in the Poly Mod Loader you install. Put Forge mods in
mods/and the launcher profile or a server from the installer runs them. In our test the client entered a world with Forge test mods next to a Fabric mod, and the installed server ran a Forge mod. - The first start with Forge mods downloads Forge's files (about 50 MB) from Forge's servers; without Forge mods nothing changes.
- Profiles and servers installed with an older installer cannot run Forge mods: install again with this version.
- Forge support is still experimental.
주요 변경
- 이제 설치한 Poly 모드 로더에서 Forge 모드가 실행됩니다.
mods/에 Forge 모드를 넣으면 설치 프로그램이 만든 런처 프로필과 서버가 실행합니다. 시험에서는 클라이언트가 Forge 테스트 모드와 Fabric 모드를 함께 넣고 월드에 들어갔고, 설치한 서버가 Forge 모드를 실행했습니다. - Forge 모드를 넣고 처음 시작하면 Forge 파일(약 50MB)을 Forge 서버에서 받습니다. Forge 모드가 없으면 달라지는 것이 없습니다.
- 이전 설치 프로그램으로 설치한 프로필과 서버는 Forge 모드를 실행하지 못합니다. 이 버전으로 다시 설치하세요.
- Forge 지원은 아직 실험 단계입니다.
Full changes
Forge mods in the installed Poly Mod Loader (2026-10-23, ADR-0024, ADR-0021 G9)
- Forge mods now load in the Poly Mod Loader that the installer sets up: the Minecraft Launcher profile and the dedicated server from
install-server. Before, they were left out withPOLY-COMPAT-206because Forge's file systems were not on the JVM class path - Poly Mod Loader has a small Java agent (
SystemClassPathAgent) that only keeps the JVM'sInstrumentation. The launcher profile starts it with-javaagent:${library_directory}/…, andpolymodloader-server.jarnames it asLauncher-Agent-Class, sojava -jar polymodloader-server.jarneeds no extra flag - Only when Forge mods are present, Forge's
securemodules,unsafe,JarJarFileSystemsandroimfs(downloaded from Forge's Maven with SHA-1 checks, as before) are added to the JVM class path. Without Forge mods nothing is downloaded and the class path is unchanged POLY-COMPAT-206now says why: started without the agent (install the profile or server again with this installer), or Java listed its file systems before Forge's were added- Profiles and servers installed by an older installer have no agent; install again to use Forge mods
Install: on Windows run PolyModLoader-0.1.0-alpha.16.exe; elsewhere run PolyModLoader-0.1.0-alpha.16.jar (Java 17 or newer).
설치: Windows는 PolyModLoader-0.1.0-alpha.16.exe, 그 밖에는 PolyModLoader-0.1.0-alpha.16.jar(Java 17 이상)를 실행합니다.
NOT AN OFFICIAL MINECRAFT PRODUCT. NOT APPROVED BY OR ASSOCIATED WITH MOJANG OR MICROSOFT.
Poly Mod Loader 0.1.0-alpha.15
Minecraft: 26.1, 26.1.1, 26.1.2, 26.2
Highlights
- PolyLoader is now Poly Mod Loader. The installer is
PolyModLoader-<version>.exe/.jar, the launcher profile is Poly Mod Loader , and the releases live at github.com/xyrz47-spec/Poly-Mod-Loader. - A profile from an older installer stays in the launcher next to the new one; remove it there if you no longer need it.
- Mods made with the old
dev.polyloaderSDK need to be rebuilt with the new SDK. - Forge mods now run on the client and on Minecraft 26.1 in our test setup. The installed Poly Mod Loader does not run Forge mods yet; that is the next step.
주요 변경
- PolyLoader의 이름이 Poly 모드 로더(Poly Mod Loader)로 바뀌었습니다. 설치 파일은
PolyModLoader-<버전>.exe/.jar, 런처 프로필은 **Poly Mod Loader <Minecraft 버전>**이고, 릴리스는 github.com/xyrz47-spec/Poly-Mod-Loader에 있습니다. - 이전 설치 프로그램이 만든 프로필은 새 프로필 옆에 그대로 남습니다. 필요 없으면 런처에서 지우세요.
- 이전
dev.polyloaderSDK로 만든 모드는 새 SDK로 다시 빌드해야 합니다. - 시험 환경에서 Forge 모드가 클라이언트와 Minecraft 26.1에서도 실행됩니다. 설치한 Poly 모드 로더에서 Forge 모드를 실행하는 것은 다음 단계입니다.
Full changes
Renamed: Poly, and Poly Mod Loader (2026-10-23, ADR-0023)
- The product is now Poly and the mod loader Poly Mod Loader (Korean: Poly 모드 로더). PolyLoader is the old name
- Identifiers that held
polyloadernow holdpolymodloader: Java packagesdev.polymodloader.*, the Maven group and the mod plugin IDdev.polymodloader.mod, the installerPolyModLoader-<version>.jar/.exe, the server jarpolymodloader-server.jar, and the launcher versionpolymodloader-<version>-<minecraft>with the profile "Poly Mod Loader " - The public GitHub repository is now
xyrz47-spec/Poly-Mod-Loader - Unchanged: the
polyprefix (modules,poly.mod.json,POLY-error codes, mod IDpoly,.poly/), the website address and the license name - Mods built against the
dev.polyloaderSDK need to be rebuilt with the new SDK. A profile installed by an older installer stays next to the new one until removed
Forge on the client and on Minecraft 26.1 (2026-10-23, ADR-0021 G7)
- MinecraftForge runs on the client too: the real Forge mods of the corpus, with a Fabric mod, enter a saved world, play and save (
corpusForgeClient, 26.2) - When the host loader patched the target of one of Poly Mod Loader's own rules (Forge pages creative tabs itself), that rule is off with a warning instead of stopping the launch
- With Forge running, a jar built for several loaders is run by Forge also when Fabric mods are installed (JourneyMap's Forge jar carries a Fabric stub that stops Fabric Loader on purpose). In
corpusFabricForgethe Fabric side is now 90 mods - Forge mods' Mixin configurations from nested jars carry the mod ID of the jar that ships them, so Mixin's generated member names stay valid
- MinecraftForge for Minecraft 26.1, 26.1.1 and 26.1.2 (Forge 62.0.9, 63.0.2, 64.1.5). A Forge patch applies to the class it names as its original, as Forge's installer does (some 26.1 patches name the patched class differently)
Install: on Windows run PolyModLoader-0.1.0-alpha.15.exe; elsewhere run PolyModLoader-0.1.0-alpha.15.jar (Java 17 or newer).
설치: Windows는 PolyModLoader-0.1.0-alpha.15.exe, 그 밖에는 PolyModLoader-0.1.0-alpha.15.jar(Java 17 이상)를 실행합니다.
NOT AN OFFICIAL MINECRAFT PRODUCT. NOT APPROVED BY OR ASSOCIATED WITH MOJANG OR MICROSOFT.
PolyLoader 0.1.0-alpha.9
Minecraft: 26.1, 26.1.1, 26.1.2, 26.2
Highlights
- The installer can now set up a dedicated server. Choose "Server" and a folder; it downloads Mojang's server and writes
run.bat,run.shandpolyloader-server.jar. You still accept Minecraft's EULA yourself.
주요 변경
- 설치 프로그램으로 전용 서버도 설치할 수 있습니다. "서버"와 폴더를 고르면 Mojang 서버를 받고
run.bat,run.sh,polyloader-server.jar를 만듭니다. Minecraft EULA 동의는 직접 합니다.
Full changes
Server install (2026-10-22)
ServerInstaller(window: "Server"; command line:install-server [--dir] [--minecraft] [--max-memory] [--min-memory]): finds the version in Mojang's version manifest, downloads the version JSON and the server bundler checked by SHA-1, extracts the bundled server jar and libraries toversions/andlibraries/checked by the bundler's SHA-256 (the bundler's own layout), and copies the PolyLoader jars tolibraries/polyloader-server.jarholds only a manifest:Main-Classis the newPolyServerMain(PolyLauncherMainwith the launch target defaulting todedicated_server), andClass-Pathlists every jar, sojava -jar polyloader-server.jar noguiworks on any host.ClassPathGameJarLocatornow follows manifestClass-Pathentries, as the JVM does, to find the game jarrun.batandrun.shcarry the memory setting;mods/is created. The installer never writeseula.txt: the first start stops at Minecraft's EULA check. Installing again keeps worlds, settings, mods andeula.txt- New check
:poly-installer:serverInstallTest: installs a server with the installer jar (network) and starts it through PolyLoader up to the EULA check. Forge mods on an installed server are still left out (POLY-COMPAT-206), as on the client
Install: on Windows run PolyLoader-0.1.0-alpha.9.exe; elsewhere run PolyLoader-0.1.0-alpha.9.jar (Java 17 or newer).
설치: Windows는 PolyLoader-0.1.0-alpha.9.exe, 그 밖에는 PolyLoader-0.1.0-alpha.9.jar(Java 17 이상)를 실행합니다.
NOT AN OFFICIAL MINECRAFT PRODUCT. NOT APPROVED BY OR ASSOCIATED WITH MOJANG OR MICROSOFT.
PolyLoader 0.1.0-alpha.8
Minecraft: 26.1, 26.1.1, 26.1.2, 26.2
Highlights
- A Forge mod now runs through PolyLoader in our tests: Forge creates it, runs its setup event and registers its item, next to a Poly mod in the same game. An installed PolyLoader does not load Forge mods yet.
주요 변경
- Forge 모드가 이제 PolyLoader 위에서 실행됩니다(테스트 환경). Forge가 모드를 만들고 설정 이벤트를 실행하고 아이템을 등록하며, 같은 게임에서 Poly 모드도 함께 동작합니다. 설치한 PolyLoader에서 Forge 모드가 로드되는 것은 아직입니다.
Full changes
Forge mods through FML (2026-10-22, ADR-0021 G4)
- FML sees exactly the Forge mods PolyLoader found: their jars are resources of the game class loader, where FML's
ClasspathLocatorfinds them. FML's own mods folder scan (ModsFolderLocator) is left out of the BOOT layer; it read every jar inmods/as a Forge mod and stopped at Fabric and Poly mods as "not a Forge mod" - New test mod
forge-hello, written as for Forge (@Mod, the mod event bus,FMLCommonSetupEvent, aDeferredRegisteritem) and compiled against the real 26.2 game classes and Forge's API.forgeGameTestnow runs it with a Poly mod: FML constructs it in moduleforge_hello, its setup listener seesforge_hello:hello_itemregistered, and the Poly mod works in the same run - Build: a module not named after a Minecraft version can compile against game classes with
polyCompileMinecraft=<version>in itsgradle.properties(poly.minecraft-compile)
Install: on Windows run PolyLoader-0.1.0-alpha.8.exe; elsewhere run PolyLoader-0.1.0-alpha.8.jar (Java 17 or newer).
설치: Windows는 PolyLoader-0.1.0-alpha.8.exe, 그 밖에는 PolyLoader-0.1.0-alpha.8.jar(Java 17 이상)를 실행합니다.
NOT AN OFFICIAL MINECRAFT PRODUCT. NOT APPROVED BY OR ASSOCIATED WITH MOJANG OR MICROSOFT.
PolyLoader 0.1.0-alpha.7
Minecraft: 26.1, 26.1.1, 26.1.2, 26.2
Highlights
- The installer is simpler: the Minecraft version, the game's memory and Install. Everything else is under "Advanced".
- MinecraftForge itself now starts through PolyLoader in our tests: Forge loads, creates a world and passes a game test. Forge mods do not load in an installed PolyLoader yet.
주요 변경
- 설치 프로그램을 단순하게 바꿨습니다. Minecraft 버전, 게임 메모리, 설치 버튼만 보이고 나머지는 "고급 설정"에 있습니다.
- MinecraftForge 자체가 이제 PolyLoader 위에서 시작됩니다(테스트 환경). Forge가 로드되고 월드를 만들고 게임 테스트를 통과합니다. 설치한 PolyLoader에서 Forge 모드가 로드되는 것은 아직입니다.
Full changes
Installer (2026-10-22)
- The main view shows the Minecraft version, the memory (-Xmx) and Install; the launcher folder, the profile option, starting memory, closing when done, uninstall and the log are under "Advanced" (closed). Enter presses Install
MinecraftForge on PolyLoader's game class loader (2026-10-22, ADR-0021 G3b–G3d)
ForgeInstallationprepares Forge's files on the player's PC: the installer (SHA-1 pinned per Minecraft version inforge-releases.properties), the libraries itsversion.jsonlists (each checked by SHA-1), and the game jar with Forge's binary patches, in.poly/forge/<version>/ForgeBootModulesdefines FML's BOOT layer in the game class loader. Libraries PolyLoader's class path already has are shared;cpw.mods.modlauncheris ModLauncher's API plus PolyLoader's ownLauncher,Environmentand launch (forge-host.jar, written from ModLauncher's public API, not copied)PolyModLauncherruns FML's services in ModLauncher's order and defines the SERVICE, PLUGIN and GAME layers in the game class loader. Launch plugins (access transformers,RuntimeDistCleaner, …) and transformation services become a class transformation stage. Forge's launch handler starts the game;polyloader_server_gameteststarts Mojang's game test server, which Forge only runs outside production- Bridge API:
GameHostandModLoaderBridge.gameHostfor a loader that starts the game itself,GameModuleLayersfor module layers. The game class loader can define layers whose classes are not transformed, expose jars as resources only, and gives module packages their manifest's version attributes (FML reads its version from them) PolyRuntimeasks for the host when Forge mods are found (or-Dpoly.forge=always): transformation is planned against the patched jar, FML finds and loads the Forge mods, and the game starts through Forge. New codes:POLY-COMPAT-206(Forge's files could not be prepared, or PolyLoader's class path lacks Forge's file systems),207(Forge mods together with Fabric mods, not run yet),208(FML failed while starting)- Java finds file systems on the class path only, so Forge's
securemodules,unsafe,JarJarFileSystemsandroimfsmust be on PolyLoader's class path, as Forge's own shim puts them. The installed launcher profile does not have them yet, so an installed PolyLoader still leaves Forge mods out (206) - On Forge's patched jar one built-in rule,
poly:server_brand, no longer matches and is rejected; the other 70 apply.-Dpoly.transform.disable=<rule IDs|*>leaves built-in rules out, for diagnosing such conflicts - New scenarios on 26.2:
forgeGameTest(Forge's mod loading, a world, a GameTest, saving) andforgeServerBoot(up to the EULA check)
Install: on Windows run PolyLoader-0.1.0-alpha.7.exe; elsewhere run PolyLoader-0.1.0-alpha.7.jar (Java 17 or newer).
설치: Windows는 PolyLoader-0.1.0-alpha.7.exe, 그 밖에는 PolyLoader-0.1.0-alpha.7.jar(Java 17 이상)를 실행합니다.
NOT AN OFFICIAL MINECRAFT PRODUCT. NOT APPROVED BY OR ASSOCIATED WITH MOJANG OR MICROSOFT.
PolyLoader 0.1.0-alpha.6
Minecraft: 26.1, 26.1.1, 26.1.2, 26.2
Highlights
- Groundwork for Forge mods: PolyLoader can now give mods the Java module setup Forge is built on. Forge mods do not run yet, and nothing changes for players.
주요 변경
- Forge 모드를 위한 기반 작업: Forge가 전제로 하는 Java 모듈 구성을 PolyLoader가 만들 수 있게 됐습니다. Forge 모드는 아직 실행되지 않고, 플레이어에게 바뀌는 점은 없습니다.
Full changes
Forge groundwork: modules in the game class loader (2026-10-22)
- ADR-0021 revised after reading Forge's own source jars:
fmlcore,javafmllanguageand Forge itself use the JPMS game layer (services found on the layer, mod classes opened withfindModule, module opens), so replacing onlyfmlloader's state classes is not enough. The proposal now: the game class loader also defines the JPMS game layer for Minecraft, Forge, FML and Forge mods, and PolyLoader implements ModLauncher's service contracts. Running ModLauncher itself stays rejected (it would own the game classes). G3 is split into G3a–G3d indocs/plans/FORGE_SUPPORT.md, with where each Forge jar goes - G3a:
GameClassLoader.defineModuleLayerdefines a module layer whose modules belong to the game class loader. Their classes go through PolyLoader's transformer and the bridges' stages like any other and land in their named module;Class.forName(module, name),ServiceLoader.load(layer, …)and module resources work (GameClassLoaderModulesTest). Not used at run time yet; runs without modules are unchanged
Install: on Windows run PolyLoader-0.1.0-alpha.6.exe; elsewhere run PolyLoader-0.1.0-alpha.6.jar (Java 17 or newer).
설치: Windows는 PolyLoader-0.1.0-alpha.6.exe, 그 밖에는 PolyLoader-0.1.0-alpha.6.jar(Java 17 이상)를 실행합니다.
NOT AN OFFICIAL MINECRAFT PRODUCT. NOT APPROVED BY OR ASSOCIATED WITH MOJANG OR MICROSOFT.