Add ModernUI (#2620)

* Add Modern UI configuration file

Disabled zoom key
disable rounded edge
set the fonts to match vanilla TFG
and maybe a few other tweaks but those are the main one

Signed-off-by: woopSmile <tristanjobin@gmail.com>

* Add files via upload

Signed-off-by: woopSmile <tristanjobin@gmail.com>

* Disable font atlas resizing and fast text lookup

changes required for ModernUI

Signed-off-by: woopSmile <tristanjobin@gmail.com>

* Add modernUI

remove blur
remove Fps Reducer

Signed-off-by: woopSmile <tristanjobin@gmail.com>

* complete version of unifont

minecraft bundled unifont is incomplete and unsuitable for modernUI use (from the mod author himself) 

Signed-off-by: woopSmile <tristanjobin@gmail.com>

* Updated client config to use unifont

Signed-off-by: woopSmile <tristanjobin@gmail.com>

---------

Signed-off-by: woopSmile <tristanjobin@gmail.com>
Co-authored-by: Pyritie <pyritie@gmail.com>
This commit is contained in:
woopSmile 2026-01-07 08:23:46 -05:00 committed by GitHub
parent 00df70669d
commit 6cc7866328
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 361 additions and 129 deletions

View file

@ -0,0 +1,3 @@
#Modern UI bootstrap file
#Fri Dec 19 22:14:20 EST 2025
modernui_mc_disableSmoothScrolling=true

188
config/ModernUI/client.toml Normal file
View file

@ -0,0 +1,188 @@
#Screen Config
[screen]
#The duration of GUI background color and blur radius animation in milliseconds. (0 = OFF)
#Range: 0 ~ 800
animationDuration = 200
#The GUI background color in #RRGGBB or #AARRGGBB format. Default value: #99000000
#Can be one to four values representing top left, top right, bottom right and bottom left color.
#Multiple values produce a gradient effect, whereas one value produce a solid color.
#When values is less than 4, the rest of the corner color will be replaced by the last value.
backgroundColor = ["#99000000"]
#Add Gaussian blur effect to GUI background when opened.
#Disable this if you run into a problem or are on low-end PCs
blurEffect = true
#This option means that blur effect only applies to GUI screens with a background.
#Similar to Minecraft 1.20.6. Enable this for better optimization & compatibility.
blurWithBackground = true
#The kernel radius for gaussian convolution blur effect, 0 = disable.
#samples per pixel = ((radius * 2) + 1) * 2, sigma = radius / 2.
#Range: 0 ~ 18
blurRadius = 7
#A list of GUI screen superclasses that won't activate blur effect when opened.
blurBlacklist = ["net.minecraft.client.gui.screens.ChatScreen"]
#(Beta) Pause the game when inventory (also includes creative mode) opened.
inventoryPause = false
#Framerate limit on window inactive (out of focus or minimized), 0 = no change.
#Range: 0 ~ 255
framerateInactive = 10
#Framerate limit on window minimized, 0 = same as framerate inactive.
#This value will be no greater than framerate inactive.
#Range: 0 ~ 255
framerateMinimized = 0
#Master volume multiplier on window inactive (out of focus or minimized), 1 = no change.
#Range: 0.0 ~ 1.0
masterVolumeInactive = 0.5
#Master volume multiplier on window minimized, 1 = same as master volume inactive.
#This value will be no greater than master volume inactive.
#Range: 0.0 ~ 1.0
masterVolumeMinimized = 0.25
#Tooltip Config
[tooltip]
#Whether to enable Modern UI enhanced tooltip, or back to vanilla default.
enable = true
#Whether to use rounded tooltip shapes, or to use vanilla style.
roundedShape = false
#True to center the tooltip title if rendering an item's tooltip.
#Following lines are not affected by this option.
centerTitle = true
#True to add a title break below the tooltip title line.
#TitleBreak and CenterTitle will work/appear at the same time.
titleBreak = true
#True to exactly position tooltip to pixel grid, smoother movement.
exactPositioning = true
#The tooltip background color in #RRGGBB or #AARRGGBB format. Default: #E6000000
#Can be one to four values representing top left, top right, bottom right and bottom left color.
#Multiple values produce a gradient effect, whereas one value produces a solid color.
#If less than 4 are provided, repeat the last value.
colorFill = ["#E6000000"]
#The tooltip border color in #RRGGBB or #AARRGGBB format. Default: #F0AADCF0, #F0DAD0F4, #F0FFC3F7 and #F0DAD0F4
#Can be one to four values representing top left, top right, bottom right and bottom left color.
#Multiple values produce a gradient effect, whereas one value produces a solid color.
#If less than 4 are provided, repeat the last value.
colorStroke = ["#FFC2D0D6", "#FFE7DAE5", "#FFCCDAC8", "#FFC8B9AC"]
#The cycle time of tooltip border color in milliseconds. (0 = OFF)
#Range: 0 ~ 5000
borderCycleTime = 1000
#The width of tooltip border, if rounded, in GUI Scale Independent Pixels.
#Range: 0.5 ~ 2.5
borderWidth = 1.3333333333333333
#The corner radius of tooltip border, if rounded, in GUI Scale Independent Pixels.
#Range: 0.0 ~ 8.0
cornerRadius = 4.0
#The shadow radius of tooltip, if rounded, in GUI Scale Independent Pixels.
#No impact on performance.
#Range: 0.0 ~ 32.0
shadowRadius = 10.0
#The shadow opacity of tooltip, if rounded. No impact on performance.
#Range: 0.0 ~ 1.0
shadowOpacity = 0.25
#When true, tooltip border colors adapt to item's name and rarity.
adaptiveColors = true
#Amount to scroll the tooltip in response to a arrow key pressed event.
#Range: 0 ~ 320
arrowScrollFactor = 60
#General Config
[general]
#Play a sound effect when the game is loaded.
ding = true
#Specify a sound event to custom the ding sound effect.
#The default is "minecraft:entity.experience_orb.pickup"
dingSound = ""
#Specify a volume multiplier to the ding sound effect.
#Range: 0.0 ~ 10.0
dingVolume = 0.25
#Press 'C' key (by default) to zoom 4x, the same as OptiFine's.
#This is auto disabled when OptiFine is installed.
zoom = false
#Control the window mode, normal mode does nothing.
#Allowed Values: NORMAL, FULLSCREEN, FULLSCREEN_BORDERLESS, MAXIMIZED, MAXIMIZED_BORDERLESS, WINDOWED, WINDOWED_BORDERLESS
windowMode = "NORMAL"
#Whether to replace vanilla GUI scale button to slider with tips.
useNewGuiScale = true
#Remove telemetry event of client behaviors.
removeTelemetry = false
#Allow Slack or Discord shortcodes to replace Unicode Emoji Sequences in chat.
emojiShortcodes = true
#View Config
[view]
#Force layout direction to RTL, otherwise, the current Locale setting.
forceRtl = false
#The global font scale used with sp units.
#Range: 0.5 ~ 2.0
fontScale = 1.1
#Default scrollbar size in dips.
#Range: 0 ~ 1024
scrollbarSize = 4
#Distance a touch can wander before we think the user is scrolling in dips.
#Range: 0 ~ 1024
touchSlop = 4
#Distance a hover can wander while it is still considered "stationary" in dips.
#Range: 0 ~ 1024
hoverSlop = 4
#Minimum size of the touch target for a scrollbar in dips.
#Range: 0 ~ 1024
minScrollbarTouchTarget = 16
#Minimum velocity to initiate a fling in dips per second.
#Range: 0 ~ 32767
minimumFlingVelocity = 50
#Maximum velocity to initiate a fling in dips per second.
#Range: 0 ~ 32767
maximumFlingVelocity = 8000
#The coefficient of friction applied to flings/scrolls.
#Range: 0.001 ~ 7.389
scrollFriction = 0.014999999664723873
#Max distance in dips to overscroll for edge effects.
#Range: 0 ~ 1024
overscrollDistance = 0
#Max distance in dips to overfling for edge effects.
#Range: 0 ~ 1024
overflingDistance = 12
#Amount to scroll in response to a vertical scroll event, in dips per axis value.
#Range: 0.0 ~ 1024.0
verticalScrollFactor = 64.0
#Amount to scroll in response to a horizontal scroll event, in dips per axis value.
#Range: 0.0 ~ 1024.0
horizontalScrollFactor = 64.0
#The duration in milliseconds before a hover event causes a tooltip to be shown.
#Range: 0 ~ 1200
hoverTooltipShowTimeout = 500
#The duration in milliseconds before mouse inactivity causes a tooltip to be hidden.
#Range: 3000 ~ 120000
hoverTooltipHideTimeout = 30000
#Font Config
[font]
#The first font family to use. See fallbackFontFamilyList
firstFontFamily = ".\\config\\ModernUI\\unifont-17.0.03.otf"
#A set of fallback font families to determine the typeface to use.
#The order is first > fallbacks. TrueType & OpenType are supported.
#Each element can be one of the following two cases:
#1) Name of registered font family, for instance: Segoe UI
#2) Path of font files on your PC, for instance: /usr/shared/fonts/x.otf
#Registered font families include:
#1) OS builtin fonts.
#2) Font files in fontRegistrationList.
#3) Font files in '/resourcepacks' directory.
#4) Font files under 'modernui:font' in resource packs.
#Note that for TTC/OTC font, you should register it and select one of font families.
#Otherwise, only the first font family from the TrueType/OpenType Collection will be used.
#This is only read once when the game is loaded, you can reload via in-game GUI.
fallbackFontFamilyList = ["Source Han Sans CN Medium", "Noto Sans", "Segoe UI Variable", "Segoe UI", "San Francisco", "Open Sans", "SimHei", "STHeiti", "Segoe UI Symbol", "mui-i18n-compat"]
#A set of additional font files (or directories) to register.
#For TrueType/OpenType Collections, all contained font families will be registered.
#Registered fonts can be referenced in Modern UI and Minecraft (Modern Text Engine).
#For example, "E:/Fonts" means all font files in that directory will be registered.
#System requires random access to these files, you should not remove them while running.
#This is only read once when the game is loaded, i.e. registration.
fontRegistrationList = []
#Whether to use Google Noto Color Emoji, otherwise grayscale emoji (faster).
#See Unicode 15.0 specification for details on how this affects text layout.
useColorEmoji = true
#When enabled, text layout uses fractional metrics with no font hinting and applies sub-pixel positioning.
#When disabled, text layout uses integer metrics with full font hinting.
linearMetrics = true

102
config/ModernUI/text.toml Normal file
View file

@ -0,0 +1,102 @@
#Text Engine Config
[text]
#Allow text renderer to drop shadow, setting to false can improve performance.
allowShadow = true
#Fix resolution level at 2. When the GUI scale increases, the resolution level remains.
#Then GUI scale should be even numbers (2, 4, 6...), based on Minecraft GUI system.
#If your fonts are not bitmap fonts, then you should keep this setting false.
fixedResolution = false
#Control base font size, in GUI scaled pixels. The default and vanilla value is 8.
#For bitmap fonts, 8 represents a glyph size of 8x or 16x if fixed resolution.
#This option only applies to TrueType fonts.
#Range: 6.5 ~ 9.5
baseFontSize = 7.4
#Control vertical baseline for vanilla text layout, in GUI scaled pixels.
#The vanilla default value is 7.
#Range: 4.0 ~ 10.0
baselineShift = 7.0
#Control the text shadow offset for vanilla text rendering, in GUI scaled pixels.
#Range: 0.20000000298023224 ~ 2.0
shadowOffset = 0.5
#Control the text outline offset for vanilla text rendering, in GUI scaled pixels.
#Range: 0.20000000298023224 ~ 2.0
outlineOffset = 0.5
#Control the horizontal offset for bitmap fonts, in GUI scaled pixels.
#Range: 0.0 ~ 1.0
bitmapOffset = 0.5
#Set the recycle time of layout cache in seconds, using least recently used algorithm.
#Range: 2 ~ 15
cacheLifespan = 6
#The bidirectional text heuristic algorithm. The default is FirstStrong (Locale).
#This will affect which BiDi algorithm to use during text layout.
#Allowed Values: FIRST_STRONG, ANY_RTL, LTR, RTL, LOCALE, FIRST_STRONG_LTR, FIRST_STRONG_RTL
textDirection = "FIRST_STRONG"
#Whether to use Modern UI text rendering pipeline in 3D world.
#Disabling this means that SDF text and rendering optimization are no longer effective.
#But text rendering can be compatible with OptiFine Shaders and Iris Shaders.
#This does not affect text rendering in GUI.
#This option only applies to TrueType fonts.
useTextShadersInWorld = true
#For "minecraft:default" font, should we keep some glyph providers of them?
#Ignore All: Only use Modern UI typeface list.
#Keep ASCII: Include minecraft:font/ascii.png, minecraft:font/accented.png, minecraft:font/nonlatin_european.png
#Keep Other: Include providers other than ASCII and Unicode font.
#Keep All: Include all except Unicode font.
#Only Include: Only include providers that specified by defaultFontRuleSet.
#Only Exclude: Only exclude providers that specified by defaultFontRuleSet.
#Allowed Values: IGNORE_ALL, KEEP_ASCII, KEEP_OTHER, KEEP_ALL, ONLY_INCLUDE, ONLY_EXCLUDE
defaultFontBehavior = "KEEP_ALL"
#Used when defaultFontBehavior is either ONLY_INCLUDE or ONLY_EXCLUDE.
#This specifies a set of regular expressions to match the glyph provider name.
#For bitmap providers, this is the texture path without 'textures/'.
#For TTF providers, this is the TTF file path without 'font/'.
#For space providers, this is "font_name / minecraft:space",
#where font_name is font definition path without 'font/'.
defaultFontRuleSet = ["^minecraft:font\\/(nonlatin_european|accented|ascii|element_ideographs|cjk_punctuations|ellipsis|2em_dash)\\.png$", "^minecraft:include\\/space \\/ minecraft:space$", "^minecraft:font\\/(mcsans|emoji)_05_00\\d.png$", "minecraft:uniform"]
#Whether to use text component object as hash key to lookup in layout cache.
#If you find that Modern UI text rendering is not compatible with some mods,
#you can disable this option for compatibility, but this will decrease performance a bit.
#Modern UI will use another cache strategy if this is disabled.
useComponentCache = true
#Allow text layout to be computed from background threads (not cached).
#Otherwise, block the current thread and wait for main thread.
allowAsyncLayout = true
#See CSS line-break property, https://developer.mozilla.org/en-US/docs/Web/CSS/line-break
#Allowed Values: AUTO, LOOSE, NORMAL, STRICT
lineBreakStyle = "AUTO"
#Allowed Values: AUTO, PHRASE
lineBreakWordStyle = "AUTO"
#When enabled, Modern UI will compute texel density in device-space to determine whether to use SDF text or bilinear sampling.
#This feature requires GLSL 400 or has no effect.
#This generally decreases performance but provides better rendering quality.
#This option only applies to TrueType fonts. May not be compatible with OptiFine.
smartSDFShaders = true
#When rendering in 2D, this option allows Modern UI to exactly compute font size in device-space from the current coordinate transform matrix.
#This provides perfect text rendering for scaling-down texts in vanilla, but may increase GPU memory usage.
#When disabled, Modern UI will use SDF text rendering if appropriate.
#This option only applies to TrueType fonts.
computeDeviceFontSize = true
#When enabled, Modern UI will use SDF text rendering if appropriate.
#Otherwise, it uses nearest-neighbor or bilinear sampling based on texel density.
#This option only applies to TrueType fonts.
allowSDFTextIn2D = true
#When enabled, the outline of the experience level text will be tweaked.
tweakExperienceText = true
#Control the anti-aliasing of raw glyph rasterization.
antiAliasing = false
#When enabled, text layout uses fractional metrics with no font hinting.
#When disabled, text layout uses integer metrics with full font hinting.
#Disable if on low-res monitor; enable for linear text.
linearMetrics = false
#Control the minimum pixel density for SDF text and text in 3D world rendering.
#This value will be no less than current GUI scale.
#Recommend setting a higher value on high-res monitor and powerful PC hardware.
#Range: 4 ~ 10
minPixelDensityForSDF = 10
#Enable linear sampling for A8 font atlases with mipmaps, mag filter will be always
#NEAREST. We prefer computeDeviceFontSize and allowSDFTextIn2D, then setting this to
#false can improve performance. If either of the above two is false or Shaders are active,
#then setting this to true can improve readability.
linearSamplingA8Atlas = false

Binary file not shown.

View file

@ -1,9 +1,9 @@
{ {
"REGULAR_INFO": "----- Regular config values below -----", "REGULAR_INFO": "----- Regular config values below -----",
"font_atlas_resizing": true, "font_atlas_resizing": false,
"map_atlas_generation": true, "map_atlas_generation": true,
"hud_batching": false, "hud_batching": false,
"fast_text_lookup": true, "fast_text_lookup": false,
"fast_buffer_upload": true, "fast_buffer_upload": true,
"COSMETIC_INFO": "----- Cosmetic only config values below (Does not optimize anything) -----", "COSMETIC_INFO": "----- Cosmetic only config values below (Does not optimize anything) -----",
"dont_add_info_into_debug_hud": false, "dont_add_info_into_debug_hud": false,
@ -18,4 +18,4 @@
"debug_only_and_not_recommended_disable_hardware_conflict_handling": false, "debug_only_and_not_recommended_disable_hardware_conflict_handling": false,
"debug_only_print_additional_error_information": false, "debug_only_print_additional_error_information": false,
"debug_only_use_last_usage_for_batch_ordering": false "debug_only_use_last_usage_for_batch_ordering": false
} }

View file

@ -1888,69 +1888,6 @@
} }
] ]
}, },
{
"pakku_id": "Yr24iolwXV9aFEWV",
"type": "MOD",
"side": "CLIENT",
"slug": {
"curseforge": "blur-forge",
"modrinth": "blur-forge"
},
"name": {
"curseforge": "Blur (Forge)",
"modrinth": "Blur Forge (Unofficial)"
},
"id": {
"curseforge": "823106",
"modrinth": "o4Wx4DUB"
},
"files": [
{
"type": "curseforge",
"file_name": "blur-forge-3.1.1.jar",
"mc_versions": [
"1.20.1"
],
"loaders": [
"neoforge",
"forge"
],
"release_type": "release",
"url": "https://edge.forgecdn.net/files/4906/217/blur-forge-3.1.1.jar",
"id": "4906217",
"parent_id": "823106",
"hashes": {
"sha1": "562f34155f3849463449aeb1ab54cc7064e4bc86",
"md5": "1eb8a13698f8d4204094b5ea189c31d3"
},
"required_dependencies": [],
"size": 177259,
"date_published": "2023-11-27T16:15:39.520Z"
},
{
"type": "modrinth",
"file_name": "blur-forge-3.1.1.jar",
"mc_versions": [
"1.20.1"
],
"loaders": [
"forge",
"neoforge"
],
"release_type": "release",
"url": "https://cdn.modrinth.com/data/o4Wx4DUB/versions/NOiJG3oF/blur-forge-3.1.1.jar",
"id": "NOiJG3oF",
"parent_id": "o4Wx4DUB",
"hashes": {
"sha512": "9d35f532c40ca55eb054188e6293b6f57eecdb748da9bdbf68a0c2567101c09d62ac66f652602f0567247fe0fc6f5fc4d95fdc6c034ee22544d4ff2d3ae723c3",
"sha1": "562f34155f3849463449aeb1ab54cc7064e4bc86"
},
"required_dependencies": [],
"size": 177259,
"date_published": "2023-11-27T16:15:44.263909Z"
}
]
},
{ {
"pakku_id": "bDQUB8zljVVWf9mE", "pakku_id": "bDQUB8zljVVWf9mE",
"type": "MOD", "type": "MOD",
@ -5636,69 +5573,6 @@
} }
] ]
}, },
{
"pakku_id": "xHhmCkdwwzSP9oLD",
"type": "MOD",
"side": "CLIENT",
"slug": {
"curseforge": "fps-reducer",
"modrinth": "fps-reducer"
},
"name": {
"curseforge": "FPS Reducer",
"modrinth": "FPS Reducer"
},
"id": {
"curseforge": "280294",
"modrinth": "iZ10HXDj"
},
"files": [
{
"type": "curseforge",
"file_name": "FpsReducer2-forge-1.20.1-2.5.1.jar",
"mc_versions": [
"1.20.1",
"1.20"
],
"loaders": [
"forge"
],
"release_type": "release",
"url": "https://edge.forgecdn.net/files/6791/399/FpsReducer2-forge-1.20.1-2.5.1.jar",
"id": "6791399",
"parent_id": "280294",
"hashes": {
"sha1": "4920a2e1d17090007179a568181624847fba0993",
"md5": "d17bad88d746c21dcd37f16257a1e84d"
},
"required_dependencies": [],
"size": 125660,
"date_published": "2025-07-20T14:53:34.933Z"
},
{
"type": "modrinth",
"file_name": "FpsReducer2-forge-1.20.1-2.5.1.jar",
"mc_versions": [
"1.20",
"1.20.1"
],
"loaders": [
"forge"
],
"release_type": "release",
"url": "https://cdn.modrinth.com/data/iZ10HXDj/versions/UfMtCXs7/FpsReducer2-forge-1.20.1-2.5.1.jar",
"id": "UfMtCXs7",
"parent_id": "iZ10HXDj",
"hashes": {
"sha512": "b6123d73602e8909f71d71ff5fe78e3cd8dc1628645c82e4d0ca5bdc93c9a2cb3135a9bada7ffa6f5dbcb34142bf05f9546f44896df7be6f5f3f1fb804d735cd",
"sha1": "4920a2e1d17090007179a568181624847fba0993"
},
"required_dependencies": [],
"size": 125660,
"date_published": "2025-07-22T00:03:21.002137Z"
}
]
},
{ {
"pakku_id": "DNPr6iL9YKiQI0Wu", "pakku_id": "DNPr6iL9YKiQI0Wu",
"pakku_links": [ "pakku_links": [
@ -9374,6 +9248,71 @@
} }
] ]
}, },
{
"pakku_id": "DBqtXgbdT2kqVKUh",
"type": "MOD",
"side": "CLIENT",
"slug": {
"curseforge": "modern-ui",
"modrinth": "modern-ui"
},
"name": {
"curseforge": "Modern UI",
"modrinth": "Modern UI"
},
"id": {
"curseforge": "352491",
"modrinth": "3sjzyvGR"
},
"files": [
{
"type": "curseforge",
"file_name": "ModernUI-Forge-1.20.1-3.12.0.1-universal.jar",
"mc_versions": [
"1.20.1",
"1.20"
],
"loaders": [
"neoforge",
"forge"
],
"release_type": "release",
"url": "https://edge.forgecdn.net/files/6956/345/ModernUI-Forge-1.20.1-3.12.0.1-universal.jar",
"id": "6956345",
"parent_id": "352491",
"hashes": {
"sha1": "fcebe51e3c2ca34793f9b132fa05b5494ffc76a4",
"md5": "5b863668f0de88993289ba098c77dcff"
},
"required_dependencies": [],
"size": 25104473,
"date_published": "2025-09-02T16:33:54.937Z"
},
{
"type": "modrinth",
"file_name": "ModernUI-Forge-1.20.1-3.12.0.1-universal.jar",
"mc_versions": [
"1.20",
"1.20.1"
],
"loaders": [
"forge",
"neoforge"
],
"release_type": "release",
"url": "https://cdn.modrinth.com/data/3sjzyvGR/versions/6ksT8CWg/ModernUI-Forge-1.20.1-3.12.0.1-universal.jar",
"id": "6ksT8CWg",
"parent_id": "3sjzyvGR",
"hashes": {
"sha512": "cf9a1bfa25f956a9277639da833a86d59a6a55bc690b6c03d4292bb240cb775c32ecf7ae253db7779757e2c74c5adf2c272c4ecdb35b907027de3ec7534bbd27",
"sha1": "fcebe51e3c2ca34793f9b132fa05b5494ffc76a4"
},
"required_dependencies": [],
"size": 25104473,
"date_published": "2025-09-02T16:36:27.248973Z"
}
]
},
{ {
"pakku_id": "vLkSeib1zFzTMcPF", "pakku_id": "vLkSeib1zFzTMcPF",
"type": "MOD", "type": "MOD",