Mods
Resource Packs
Data Packs
Modpacks
Shaders
Plugins
Mods Resource Packs Data Packs Plugins Shaders Modpacks
Get Modrinth App Upgrade to Modrinth+
Sign in
ModsPluginsData PacksShadersResource PacksModpacks
Sign in
Settings
oωo (owo-lib)

oωo (owo-lib)

A general utility, GUI and config library for modding on Fabric and Quilt

11.94M
1,478
Library

Compatibility

Minecraft: Java Edition

1.21.x
1.20.x
1.19.x
1.18.x
1.17.x

Platforms

Fabric
NeoForge
Quilt

Supported environments

Client-side
Server-side
Client and server

90% of ad revenue goes to creators

Support creators and Modrinth ad-free with Modrinth+

Links

Report issues View source Join Discord server

Creators

Wisp Forest
Wisp ForestOrganization

glisco
glisco Owner
BasiqueEvangelist
BasiqueEvangelist Member
Blodhgarm
Blodhgarm Member

Details

Licensed MIT
Published 3 years ago
Updated last month
DescriptionChangelogVersions

Show all versions

1
3
4
5

[1.19] oωo - 0.9.0

by glisco on Nov 22, 2022
Download

Additions

UI

  • Cursor styling functionality from OwoUIAdapter is now available globally via the new CursorAdapter abstraction, which also provides the implementation for owo-ui
  • The new configure method on Component enables inline configuration of component properties which don't return the component itself. Due to limitations with Java's generic parameters, it is required to manually specify the type of component you're configuring when calling this method, like so: Components.label(...).<LabelComponent>configure(label -> label.mouseDown().subscribe(...)).
    Additionally, any state change events emitted during execution of such a configuration closure are delayed until the closure has completed - this enables large performance improvements when configuring multiple properties of a mounted component, including adding/removing children, as everything is consolidated into a single layout pass
  • The flow layout has gained the new gap property, which adds the specified amount of dead space between each child
  • Collapsible containers now expose the onToggled event stream as well as their current state
  • All components can now easily look up the root component in their respective tree using the new root() method
  • Text box max length can now be defined in XML with the max-length element
  • The new popFramesAndDraw method on ScissorStack, allows escaping up to the given amount of clipping frames and execute the supplied draw call
  • owo-ui colors can now generate a hex color string via the asHexString method
  • Entity components can now have an additional dynamic transform applied before rendering the entity
  • Components#textBox(...) no longer creates and returns a TextFieldWidget, instead it creates a TextBoxComponent. This is owo-ui's extension of the vanilla text field, which properly sizes itself if the background is disabled and provides the onChanged event stream. This stream only emits events when the text in the box actually changes, unlike the vanilla change listener

Config

  • The config screen now includes a search bar which allows searching through all options and sections by name and value. This search function acts like search in a text editor - you enter your query, then press enter, after which you can inspect all matches individually by pressing enter again
  • The new client-side /owo-config command can open all config screens for which a provider is registered, even when modmenu is not installed
  • Set<T> is now a supported type for config options

UI - Layers

Built on top of owo-ui, a new system called Layers has been introduced. This generic API allows adding, or layering if you will, owo-ui components onto arbitrary existing screens. It comes with a helper system that allows easily locating existing vanilla widgets on the screen, as well as the option to align your own components relative to them

Screen Handler Properties and Messages

The new createProperty along with addServerboundMessage and addClientboundMessage methods injected into ScreenHandler allow for a significant simplification of screen networking. Everything owo can serialize by default is supported out of the box for properties, which automatically get synchronized to the client, and for messages the same rules apply as for standard packets in an OwoNetChannel. As always, if a serializer is missing you can add your own via PacketBufSerializer.register(...)

This system should completely eliminate the need for externally defined networking, everything can be done directly inside the screen handler

Changes

ItemGroup API

  • Existing item groups can now be extended with additional sub-tabs and buttons via mod data
  • The name of a sub-tab is now displayed after the name of the item group, given that the tab does not have the new primary attribute
  • Each sub-tab can now declare its contained items more rigorously, as they now define a callback which gets executed to populate the group
  • [1.19.3 only] OwoItemGroups now define their icon in terms of an owo Icon, meaning you are no longer restricted to just item stacks

UI

  • Sliders have been migrated to use event streams just like other input events and gained the new slideEnd event stream which gets invoked when the user releases the slider handle
  • apply_ContentSizing in BaseComponent has been replaced by determnine_ContentSizing which now returns the content size instead of applying it directly

Moreover, the layout algorithm has received a major optimization that improves layout times in complex screens by up to 560%

Config

  • Additionally to the existing method, enum config options can now be translated on a per-config instead of a per-option level
  • When adding a new entry to a list config option while it isn't expanded, the list now opens itself and focuses the new entry (#68)
  • The previously private mechanism for registering config screen providers used by the @Modmenu annotation has been made public as ConfigScreen#registerProvider. This means that any potential custom config screen implementations can now be easily registered without needing an additional dependency on modmenu

Misc

  • The owo.forceDisableDebug system property is now deprecated and superseded by simply setting owo.debug to false

Fixes

UI

  • Scrollbars can no longer exceed the size of the container
  • When dragging the scrollbar in a precisely filled scroll container, the content no longer becomes invisible
  • All button renderers now properly draw with depth testing enabled
  • Text boxes, more specifically TextFieldWidget, now properly respond to focus events
  • The UI Interaction sound event is no longer added to the respective registry, which means that client-side mods which use owo no longer cause registry sync to fail (#72)
  • Animations on parent components no longer update twice per frame

Config

  • Section headers applied to @Nest options now show up properly
  • The config screen no longer attempts to apply constraints placed on List config options to that lists elements (#69)
  • owo is inherently funny

Misc

  • owo no longer crashes when run on a dev server

Removed deprecated elements

  • TexturedButtonComponent, superseded by ButtonComponent.Renderer#texture(...)
  • All methods in Components which returned ButtonWidget, superseded by ButtonComponent
  • ScreenUtils#generateSlotGrid and ScreenUtils#generatePlayerSlots, superseded by SlotGenerator
  • ScrollContainer.scrollbarColor, superseded by ScrollContainer.Scrollbar#color(...)

[1.19+] oωo - 0.8.5

by glisco on Oct 14, 2022
Download

Changes

  • The slot management methods on BaseOwoHandledScreen now have overloads which directly accept a slot instance instead of just and ID
  • The Z-Offset of the inspector can now be customized in OwoUIAdapter
  • The new ReiUIAdapter#wrap(WidgetWithBounds) allows embedding most if not all of REI's existing Widgets in an owo-ui-based REI display category

Fixes

  • Mouse coordinates are now passed with proper offsets when propagating mouse events to the focused component

[1.19+] oωo - 0.8.4

by glisco on Oct 10, 2022
Download

Changes

  • Texture components have a new property - blend. When this is enabled, OpenGL alpha blending is properly set up and you can use translucent textures
  • All synced config options are now synced in INFORM_SERVER fashion even when playing singleplayer

Fixes

  • The client-only renderdoc command is no longer registered on the server, allowing you to start servers with owo in debug mode again
  • The visible-area declaration in the UI Model XML schema no longer requires all values to be specified
  • The intersection comparisons used for mouse events and component visibility checks no longer over-account by one pixel
  • String config options can now contain backslashes (#59)

[1.19+] oωo - 0.8.3

by glisco on Oct 3, 2022
Download

Changes

Component customization

  • Button rendering can now be completely customized, with a new flat renderer available among the defaults. This also means TexturedButtonComponent is now deprecated and superseded by the texture button renderer
  • Scrollbar rendering is now fully customizable as well. By default, this includes the two types of vanilla scrollbar used in game menus and the creative inventory screen as well as the default flat owo-ui scrollbar. Scroll containers can now also define an increment by which they are scrolled and the length of the scrollbar can be set to a fixed value
  • owo-ui now features the NinePatchRenderer utility, which can draw a nine-patch style texture in both tiled and stretched mode with next to no performance impact. This is used to enable the new scrollbar rendering and also allows buttons to scale to arbitrary sizes, contrary to the vanilla implementation. As it is also used to draw the panel surface, performance on all screens that use panels should be improved

RenderDoc integration

When RenderDoc is injected into a game instance with owo installed, you can now take advantage of comprehensive bindings to RenderDoc API. In-game this enables the new /renderdoc client command which opens a screen that lets you configure the RenderDoc overlay as well as take captures and launch the Replay UI. Additionally, when in an owo screen, CTRL+ALT+R can create a capture of only the draw calls relevant to screen - check out the docs over at https://docs.wispforest.io/owo/renderdoc/

Fixes

owo-ui

  • Scroll containers now properly account for their child's margins and mount it with the current scroll position already applied
  • Named text colors no longer need to be intentionally misspelled to get parsed properly
  • The inspector can no longer go offscreen
  • Vanilla widgets now properly propagate the focus events
  • Component visiblity is now checked with the model view transform applied
  • Labels no longer cause unnecessary state updates
  • Tooltips now properly respect overflow clipping and component visibility
  • Checkboxes now properly emit all checked/unchecked events

Other

  • @Nest config entries can now have the same name as their class (#52)
  • sentinel now always runs in console-mode on macOS (#51)

[1.19+] oωo - 0.8.2

by glisco on Sep 11, 2022
Download

Changes

  • The biggest change in this release is the addition of the SlotComponent, a simple wrapper for handled screen slots. You can obtain the instance for a given slot via the slotAsComponent(int) method on BaseOwoHandledScreen. It will then always move the linked slot to where the component gets placed by the layout and apply clipping properly
  • Config wrappers now create the full file path of a config - this allows properly grouping multiple configs in a directory

Fixes

  • The Modrinth item group icon now matches current branding
  • Status effects in the creative inventory now properly shift when there are item group buttons in the way
  • Pressing tab in an owo item group with buttons or tabs no longer renders a tooltip whereever the cursor is

[1.19+] oωo - 0.8.1

by glisco on Sep 7, 2022
Download

Fixes

  • The config Annotation Processor no longer crashes when you have a config model without any nested objects

[1.19+] oωo - 0.8.0

by glisco on Sep 6, 2022
Download

The 0.8 Update

This release marks the first public beta of owo-lib 0.8, the UI and Config update. As that name suggests the primary new features in this release are the owo-ui GUI framework and the owo-config configuration and screen generation library. You can find their respective documentation here:

  • owo-ui: https://docs.wispforest.io/owo/ui/
  • owo-config: https://docs.wispforest.io/owo/config/

Both of these additions are highly complex and introduce potential bugs. There has been extensive testing to try and ensure a smooth start, but of course we cannot guarantee that everything has been squashed. So while we consider it more than safe enough to use, keep this in mind and please report any bugs you may find.

Other changes

There have also been a number of smaller refactors and new deprecations across the entire library, notably ScreenUtils#generatePlayerSlots has been deprecated and replaced with the more flexible and powerful SlotGenerator utility. owo-sentinel has finally been fixed to work properly in 1.19 environments and the rich translations feature is now fully compatible with Server Translations API.

Another small new feature, courtesy of Blodhgarm, is the Recipe-specific Remainders API which, as the name suggests, enables recipe remainders to be defined and applied on a per-recipe level instead of globally.

Deprecated APIs

As this is a large release, the majority if not all previously deprecated APIs have been stripped and/or partly refactored. The majority of mods should be fine, although if you haven't updated in a while there's potential you need to fix some things.

[1.18.2] oωo - 0.7.2

by glisco on Jun 9, 2022
Download

Changes

  • Refer to changelog for 0.7.3+1.19

Fixes

  • CME during oregen should be fixed

[1.19] oωo - 0.7.3

by glisco on Jun 7, 2022
Download

Changes

  • /heal and /damage now report the effective HP change
  • Argument order in VectorSerializer now matches convention, store and storef have been renamed to put and putf
  • sentinel is now intialized in a mixin plugin
  • owo.text has been added - an experimental, currently undocumented API for making custom TextContent types

Fixes

  • Copenhagen now uses a ThreadLocal map to avoid concurrency issues in worldgen
  • WorldOps.teleportToDimension no longer swaps yaw and pitch

[1.18.2] oωo - 0.7.2

by glisco on May 5, 2022
Download

Allow using custom stack generators with owo item groups

[1.18.2] oωo - 0.7.1

by glisco on May 2, 2022
Download

NbtKey API for basic NBT serialization duties like in Item implementations and improved debug commands

[1.18.2] oωo - 0.7.0

by glisco on Apr 20, 2022
Download

Headless environment support for sentinel, updated TagInjector framework, fix compatibility with Quilt Loader, add RegistryAccess, allow ClientParticles to randomize velocity on only one axis, deprecate @ElementType and @MapTypes, relocate RegistryHelper creation, add deferred packet and particle system handlers, add dispatched and polymorphic packet serializer framework, freeze particle systems

[1.18.2] oωo - 0.6.0

by glisco on Mar 22, 2022
Download

Optional channels, automatic generics extraction, removed deprecated ServerParticles and field processing api

[1.18.2] owo - 0.5.4

by glisco on Feb 28, 2022
Download

First public release for 1.18.2

[1.18+] oωo - 0.5.2

by glisco on Feb 13, 2022
Download

Update to loom 0.11, add default serializers for ChunkPos and ParticleEffect, add 'query_poi' debug command, make text field injection trert didgts as word characters

[1.18+] oωo - 0.5.1

by glisco on Jan 29, 2022
Download

Fix handshake stalling the client when the server is incompatible, freeze channels after mod init, rename particle system exectute method to spawn, fix namespace of enum argument type

[1.18+] oωo - 0.5.0

by glisco on Jan 23, 2022
Download

Add handshake support to avoid joining incompatible servers, add offline data api, add new particle api, fix primitive array serialization

[1.18+] oωo - 0.4.0

by glisco on Jan 20, 2022
Download

Added networking API, some additions to ReflectionUtils

[1.18+] oωo - 0.3.14

by glisco on Jan 3, 2022
Download

Fix crash caused by an action registered via the RegistryHelper registering a new entry into its registry, make KawaiiUtil part of the public API

[1.18+] oωo - 0.3.13

by glisco on Jan 1, 2022
Download

API change in FieldProcessingSubject and its dependents - all methods that got passed ID and value now also get passed the field object

1
3
4
5

Modrinth is open source.

main@4bafae8

© Rinth, Inc.

Company

TermsPrivacyRulesCareers

Resources

SupportBlogDocsStatus

Interact

Discord X (Twitter) Mastodon Crowdin
Get Modrinth App Settings
NOT AN OFFICIAL MINECRAFT SERVICE. NOT APPROVED BY OR ASSOCIATED WITH MOJANG OR MICROSOFT.