Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
c4afae8
build: replace purged advanture-platform snapshot
lunaynx Sep 16, 2026
9ad85c3
fix(ui): remove UI scaling config (#1084)
saadndm Sep 16, 2026
47f34db
chore: bump to 1.2.1
awruff Sep 16, 2026
58f24b0
build: compile modmenu shim with project toolchain
awruff Sep 18, 2026
092d202
fix(hud): pause game while HUD editor is open (#1088)
saadndm Sep 18, 2026
158990a
fix(ui): remove duplicate accordion option padding (#1089)
saadndm Sep 18, 2026
50cd4a4
chore: remove unused kotlinx-atomicfu dependency
lunaynx Sep 18, 2026
c6a6130
fix(compat): gate SkyCubed HUD placement until overlay bounds are ava…
lunaynx Sep 16, 2026
53f14df
HUD preview improvements (#1086)
saadndm Sep 19, 2026
5f3d810
fix(ui): move warm-up to startup (#1073)
saadndm Sep 19, 2026
c198c24
perf(items): render item icons from a GPU atlas (#1087)
saadndm Sep 20, 2026
965279e
chore: bump to 1.2.2
awruff Sep 20, 2026
725f9c7
fix(render): create the Skia GL context on Wayland/EGL
awruff Sep 20, 2026
35d0809
chore: bump to 1.2.3
awruff Sep 21, 2026
fb2cb9f
Merge branch 'v1' into legacy
saadndm Sep 20, 2026
a18a1fc
chore(legacy): fix nvim formatter diff
saadndm Sep 20, 2026
2308752
feat(legacy): OSL 0.21
saadndm Sep 20, 2026
cd17c3a
Merge remote-tracking branch 'upstream/v1' into legacy
saadndm Sep 21, 2026
4b4ef85
fix(legacy): use java 25
saadndm Sep 21, 2026
be9fcad
fix(legacy): restore vanilla space width
saadndm Sep 21, 2026
27e5607
fix(legacy): resync depth test cache so chat hovers render
saadndm Sep 21, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 2 additions & 4 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,2 @@
1.2.0 changelogs:
- Fixed conflicting keybind handling always using Right Shift instead of the actual OneConfig open keybind
- Fixed notifications not being clickable on macOS Retina and possibly other HiDPI setups
- Added support for Minecraft 26.3
1.2.3 changelogs:
- fixed gl context not being created on wayland/egl
1 change: 0 additions & 1 deletion buildSrc/src/main/kotlin/oneconfig-bootstrap.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,6 @@ gradle.projectsEvaluated {
"org.jetbrains.kotlinx:kotlinx-serialization-core-jvm",
"org.jetbrains.kotlinx:kotlinx-serialization-json-jvm",
"org.jetbrains.kotlinx:kotlinx-serialization-cbor-jvm",
"org.jetbrains.kotlinx:atomicfu-jvm",
"org.jetbrains.kotlinx:kotlinx-datetime-jvm",
"org.jetbrains.kotlinx:kotlinx-io-core-jvm",
"org.jetbrains.kotlinx:kotlinx-io-bytestring-jvm",
Expand Down
6 changes: 6 additions & 0 deletions buildSrc/src/main/kotlin/oneconfig-fabric.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import dev.kikugie.stonecutter.build.StonecutterBuildExtension
import net.fabricmc.loom.api.LoomGradleExtensionAPI
import org.gradle.api.artifacts.VersionCatalogsExtension
import org.gradle.api.tasks.testing.logging.TestExceptionFormat
Expand Down Expand Up @@ -40,8 +41,13 @@ tasks.withType<Test>().configureEach {
}
}

val sc = extensions.getByName<StonecutterBuildExtension>("stonecutter")
val loom = extensions.getByName<LoomGradleExtensionAPI>("loom")
loom.apply {
accessWidenerPath = sc.process(
rootProject.file("minecraft/src/main/resources/oneconfigv1.classtweaker"),
"build/processed.classtweaker",
)
runConfigs["client"].apply {
ideConfigGenerated(true)
runDir = "../../run"
Expand Down
13 changes: 10 additions & 3 deletions buildSrc/src/main/kotlin/oneconfig-setup.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@ if (loader == "fabric") {
val modMenuShimClasses = layout.buildDirectory.dir("classes/modMenuShim")
val compileModMenuApiShimJava = tasks.register<JavaCompile>("compileModMenuApiShimJava") {
val mainSourceSet = sourceSets.named("main").get()
javaCompiler.set(tasks.named<JavaCompile>("compileJava").flatMap { it.javaCompiler })
source(rootProject.projectDir.resolve("minecraft/src/modMenuShim/java"))
classpath = files(mainSourceSet.output.classesDirs, mainSourceSet.compileClasspath)
destinationDirectory.set(modMenuShimClasses)
Expand Down Expand Up @@ -180,7 +181,7 @@ val firmamentRelocatedConfiguration: Configuration by configurations.creating {

val adventurePlatform = when {
loader != "fabric" -> null
stonecutter.eval(stonecutter.current.version, ">= 26.2") -> "7.0.0-SNAPSHOT"
stonecutter.eval(stonecutter.current.version, ">= 26.2") -> "7.0.0"
stonecutter.eval(stonecutter.current.version, ">= 26.1") -> "6.9.0"
stonecutter.eval(stonecutter.current.version, ">= 1.21.11") -> "6.8.0"
stonecutter.eval(stonecutter.current.version, ">= 1.21.10") -> "6.7.0"
Expand Down Expand Up @@ -451,15 +452,21 @@ tasks.withType<ProcessResources>() {
exclude("ornithe.mod.json")
}

val mixinCompat = if (stonecutter.eval(stonecutter.current.version, ">= 26.1")) "JAVA_25" else "JAVA_21"
val mixinCompat = if (
stonecutter.eval(stonecutter.current.version, ">= 26.1") ||
stonecutter.eval(stonecutter.current.version, "= 1.8.9")
) "JAVA_25" else "JAVA_21"
this.inputs.property("mixin_compat", mixinCompat)
this.filesMatching("mixins.oneconfigv1*.json") {
filter { line -> line.replace("\"JAVA_21\"", "\"$mixinCompat\"") }
}
}

val minJavaVersion = 21
val javaVersion = if (stonecutter.eval(stonecutter.current.version, ">= 26.1")) {
val javaVersion = if (
stonecutter.eval(stonecutter.current.version, ">= 26.1") ||
stonecutter.eval(stonecutter.current.version, "= 1.8.9")
) {
25
} else {
21
Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
org.gradle.jvmargs=-Xmx4096m

group=org.polyfrost.oneconfig
version=1.2.0
version=1.2.3

ksp.incremental=false
2 changes: 1 addition & 1 deletion gradle/fabric/1.21.1.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ modmenu = "11.0.3"
yacl = "3.7.1+1.21.1-fabric"
moulconfig = "3.11.0"

vulkanmod = "pY3DXoVe"
vulkanmod = "2eqroDKD"

[libraries]
modmenu = { module = "com.terraformersmc:modmenu", version.ref = "modmenu"}
Expand Down
4 changes: 1 addition & 3 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
# All
kotlin = "2.4.10"
kotlinx-coroutines = "1.10.2"
kotlinx-atomicfu = "0.29.0"
fabric-language-kotlin = "1.13.13+kotlin.2.4.10"
google-ksp = "2.3.11"
annotations = "24.1.0"
Expand Down Expand Up @@ -83,7 +82,6 @@ kotlin-stdlib-jdk8 = { module = "org.jetbrains.kotlin:kotlin-stdlib-jdk8", versi
kotlinx-coroutines = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlinx-coroutines" }
kotlinx-coroutines-jvm = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm", version.ref = "kotlinx-coroutines" }
kotlinx-coroutines-jdk8 = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-jdk8", version.ref = "kotlinx-coroutines" }
kotlinx-atomicfu = { module = "org.jetbrains.kotlinx:atomicfu-jvm", version.ref = "kotlinx-atomicfu" }
fabric-language-kotlin = { module = "net.fabricmc:fabric-language-kotlin", version.ref = "fabric-language-kotlin" }

jetbrains-compose-foundation = { module = "org.jetbrains.compose.foundation:foundation-desktop", version.ref = "compose" }
Expand Down Expand Up @@ -145,7 +143,7 @@ adventure = [
"kyori-option",
]
kotlin = ["kotlin-reflect", "kotlin-stdlib", "kotlin-stdlib-jdk7", "kotlin-stdlib-jdk8"]
kotlinx = ["kotlinx-coroutines", "kotlinx-coroutines-jvm", "kotlinx-coroutines-jdk8", "kotlinx-atomicfu"]
kotlinx = ["kotlinx-coroutines", "kotlinx-coroutines-jvm", "kotlinx-coroutines-jdk8"]
lwjgl = ["lwjgl", "lwjgl-nvg", "lwjgl-opengl", "lwjgl-stb", "lwjgl-tinyfd"]
nightconfig = ["nightconfig", "nightconfig-json", "nightconfig-toml", "nightconfig-yaml"]
test-core = ["junit", "logging-impl"]
Expand Down
2 changes: 1 addition & 1 deletion gradle/ornithe.versions.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[versions]
loader = "0.19.3"
osl = "0.20.3"
osl = "0.21.0"
feather_build = "2"
ploceus = "1.17.4"

Expand Down
5 changes: 5 additions & 0 deletions mappings/feather-overrides.tiny
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,11 @@ c net/minecraft/client/Minecraft net/minecraft/client/Minecraft
m ()I m_53086118 getFramerateLimit
m ()Lnet/minecraft/unmapped/C_06196994; m_17688331 getMainRenderTarget
m ()V m_61857590 startUseItem
f Lnet/minecraft/unmapped/C_23014920; f_21497584 font
c net/minecraft/unmapped/C_23014920 net/minecraft/client/render/TextRenderer
m (Ljava/lang/String;)I m_09235706 width
c net/minecraft/unmapped/C_88708284 net/minecraft/item/ItemStack
f I f_60602012 count
c net/minecraft/unmapped/C_23708450 net/minecraft/client/KeyMapping
m ()Z m_70603120 isDown
c net/minecraft/unmapped/C_76792751 net/minecraft/client/Options
Expand Down
4 changes: 0 additions & 4 deletions minecraft/ornithe.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,6 @@ ploceus {
setIntermediaryGeneration(2)
}

loom {
accessWidenerPath.set(rootProject.file("minecraft/src/main/resources/oneconfigv1.classtweaker"))
}

dependencies {
modImplementation(versionedCatalog["fabric-language-kotlin"])
modImplementation(versionedCatalog["fabric-loader"])
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@
import org.polyfrost.oneconfig.internal.ui.api.ConfigRegistry;
import org.polyfrost.oneconfig.internal.ui.api.ConfigSource;
import org.polyfrost.oneconfig.internal.ui.api.ThirdPartyModCategories;
import org.polyfrost.oneconfig.internal.ui.components.item.ItemCatalog;
import org.polyfrost.oneconfig.internal.ui.compose.McFontService;
import org.polyfrost.oneconfig.internal.ui.compose.SkiaCtx;
import org.polyfrost.oneconfig.internal.ui.compose.impls.HudEditorUIScreen;
Expand All @@ -73,6 +74,10 @@
import org.polyfrost.oneconfig.internal.ui.keybind.KeybindConflicts;
import org.polyfrost.oneconfig.internal.ui.search.SearchCorpus;
import org.polyfrost.oneconfig.test.TestMod_Test;
//? if = 1.8.9 {
/*import net.ornithemc.osl.resource.loader.api.client.ClientResourceLoaderEvents;
import org.polyfrost.oneconfig.internal.ui.compose.SkiaFontRenderer;
*///?}

//? neoforge
//@net.neoforged.fml.common.Mod("oneconfigv1")
Expand Down Expand Up @@ -200,7 +205,7 @@ public static void render(GuiGraphicsExtractor graphics, float partial) {
// 1.8.9 replays the overlay in Mixin_SkiaFrame after Skia finishes drawing instead
//? if > 1.8.9
org.polyfrost.oneconfig.internal.ui.hud.DebugOverlayOffscreen.INSTANCE.render();
if (HudManager.INSTANCE.beginFrame(sw, sh)) {
if (HudManager.INSTANCE.beginFrame(sw, sh, ItemCatalog.INSTANCE::renderHudIcons)) {
SkiaCtx.INSTANCE.queueHudDraw(() -> {
var ctx = new RenderContext(SkiaCtx.INSTANCE.getCanvas());
HudManager.INSTANCE.render(ctx, sw, sh);
Expand Down Expand Up @@ -270,7 +275,10 @@ private static void registerEventHandlers() {
org.polyfrost.oneconfig.internal.compat.WWaypointsCompat.register();
org.polyfrost.oneconfig.internal.ui.themes.ThemeRegistry.INSTANCE.loadFromConfig();
});
EventManager.register(WorldEvent.Load.class, e -> showFirstLaunchNotification());
EventManager.register(WorldEvent.Load.class, e -> {
showFirstLaunchNotification();
ItemCatalog.INSTANCE.markIconsAvailable();
});
// after loading finishes so translation keys are available
EventManager.register(ResourceFinishedLoading.class, e -> SearchCorpus.INSTANCE.init());
// //#if MC < 1.13
Expand Down Expand Up @@ -332,6 +340,12 @@ private void init() {

SkikoDataPath.redirect();

//? if = 1.8.9 {
/*ClientResourceLoaderEvents.INIT_RESOURCE_MANAGER.register(
resourceManager -> resourceManager.addReloader(SkiaFontRenderer.INSTANCE)
);
*///?}

// to enable RenderDoc set these JVM arguments
// -Drenderdoc.enabled=true
// (Windows) -Drenderdoc.path="C:\Program Files\RenderDoc\renderdoc.dll" (or wherever you installed RenderDoc)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -195,13 +195,16 @@ public List<String> getMixins() {
mixins.add("render.GameRendererAccessor");
mixins.add("render.GuiRendererAccessor");
//? }
//? if > 1.8.9
mixins.add("skia.Mixin_ItemAtlasScissor");
//? if < 1.21.8
//mixins.add("skia.Mixin_MainTargetRedirect");
mixins.add("skia.Mixin_DebugOverlayAboveUi");
//? if < 26.1 && > 1.8.9 {
/*mixins.add("skia.Mixin_ScreenshotComposite");
*///? }
mixins.add("skia.Mixin_InitSkiaFontRenderer");
mixins.add("skia.Mixin_StartupWarmupOverlay");

//? if >= 1.21.10 {
mixins.add("keybind.Mixin_KeybindCategoryLabel");
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package org.polyfrost.oneconfig.internal.legacy.compat;

//? if = 1.8.9 {
/*import net.minecraft.item.ItemStack;

public interface ItemStackCompat {
default boolean isEmpty() {
ItemStack stack = (ItemStack) (Object) this;
return stack.getItem() == null || stack.count <= 0;
}

default boolean isBarVisible() {
return ((ItemStack) (Object) this).isDamaged();
}

default int getBarWidth() {
ItemStack stack = (ItemStack) (Object) this;
return (int) Math.round(13.0 - stack.getDamage() * 13.0 / stack.getMaxDamage());
}

default int getBarColor() {
ItemStack stack = (ItemStack) (Object) this;
int health = (int) Math.round(255.0 - stack.getDamage() * 255.0 / stack.getMaxDamage());
return (255 - health) << 16 | health << 8;
}
}
*///?}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ public class Mixin_SimpleReloadInstance {
private static void oneconfig$onResourceFinishedLoading(CallbackInfoReturnable<ReloadInstance> cir) {
//~ if = 1.8.9 'done()' -> 'result()'
cir.getReturnValue().done().whenComplete((result, throwable) -> {
if (throwable != null) return;
EventManager.INSTANCE.post(ResourceFinishedLoading.INSTANCE);
});
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,17 @@

@Mixin(GuiRenderer.class)
public class Mixin_GuiRendererLegacyTarget {
@ModifyExpressionValue(
method = "draw",
//? if >= 26.1 {
at = @At(value = "FIELD", target = "Lnet/minecraft/client/renderer/state/WindowRenderState;guiScale:I", opcode = Opcodes.GETFIELD)
//?} else
//at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/platform/Window;getGuiScale()I")
)
private int oneconfig$itemAtlasProjectionScale(int original) {
return GuiTargetRedirect.itemRenderSizePx > 0 ? 1 : original;
}

//? if >= 26.1 {
@ModifyExpressionValue(
method = "draw",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,30 @@

import net.minecraft.client.Minecraft;
import org.polyfrost.oneconfig.internal.ui.compose.SkiaFontRenderer;
//? if > 1.8.9 {
import net.minecraft.server.packs.resources.ReloadableResourceManager;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Shadow;
//?}
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(Minecraft.class)
public class Mixin_InitSkiaFontRenderer {
//? if > 1.8.9 {
@Shadow
@Final
private ReloadableResourceManager resourceManager;

@Inject(method = "<init>", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/packs/resources/ReloadableResourceManager;createReload(Ljava/util/concurrent/Executor;Ljava/util/concurrent/Executor;Ljava/util/concurrent/CompletableFuture;Ljava/util/List;)Lnet/minecraft/server/packs/resources/ReloadInstance;"), require = 1)
private void impl$registerFontReloadListener(CallbackInfo ci) {
this.resourceManager.registerReloadListener(SkiaFontRenderer.INSTANCE);
}
//?}

//~ if = 1.8.9 '<init>' -> 'init'
@Inject(method = "<init>", at = @At("TAIL"))
void impl$__init__(CallbackInfo ci) {
SkiaFontRenderer.INSTANCE.init();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package org.polyfrost.oneconfig.internal.mixin.skia;

//? if > 1.8.9 {
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
//? if >= 1.21.8 {
import com.llamalad7.mixinextras.expression.Expression;
import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
import com.mojang.renderpearl.api.commands.RenderPass;
import net.minecraft.client.gui.render.GuiRenderer;
//?} else
//import net.minecraft.client.gui.GuiGraphics;
import net.minecraft.client.gui.navigation.ScreenRectangle;
import org.polyfrost.oneconfig.internal.ui.hud.GuiTargetRedirect;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;

//~ if < 1.21.8 'GuiRenderer' -> 'GuiGraphics'
@Mixin(GuiRenderer.class)
public class Mixin_ItemAtlasScissor {
//? if >= 1.21.8 {
@Expression("16 * ?")
@ModifyExpressionValue(method = "prepareItemElements", at = @At("MIXINEXTRAS:EXPRESSION"))
private int oneconfig$itemAtlasSlotSize(int original) {
int requested = GuiTargetRedirect.itemRenderSizePx;
return requested > 0 ? requested : original;
}
//?}

@WrapOperation(
//? if >= 1.21.8 {
method = "enableScissor",
at = @At(value = "INVOKE", target = "Lcom/mojang/renderpearl/api/commands/RenderPass;enableScissor(IIII)V")
//?} else {
/*method = "applyScissor",
at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/systems/RenderSystem;enableScissor(IIII)V")
*///?}
)
//~ if < 1.21.8 '(RenderPass pass, int x' -> '(int x'
private void oneconfig$targetScissor(RenderPass pass, int x, int y, int width, int height, Operation<Void> original, ScreenRectangle rectangle) {
GuiTargetRedirect.ScissorTransform transform = GuiTargetRedirect.scissorTransform;
if (transform == null) {
//~ if < 1.21.8 '(pass, x' -> '(x'
original.call(pass, x, y, width, height);
return;
}
int[] mapped = transform.map(rectangle.left(), rectangle.top(), rectangle.right(), rectangle.bottom());
//~ if < 1.21.8 '(pass, mapped[0]' -> '(mapped[0]'
original.call(pass, mapped[0], mapped[1], mapped[2], mapped[3]);
}
}
//?}
Loading
Loading