Skip to content

Implement resource reloader dependency system - #96

Open
SpaceWalkerRS wants to merge 3 commits into
texturepacks-directory-early-alphafrom
resource-reloader-dependency-system
Open

SpaceWalkerRS wants to merge 3 commits into
texturepacks-directory-early-alphafrom
resource-reloader-dependency-system

Conversation

@SpaceWalkerRS

Copy link
Copy Markdown
Member

Adds new API to register identifiable ResourceReloaders and a way to declare dependencies between them. This ensures a certain ordering between reloaders which was not possible to do before. The old API for adding reloaders still exists but is deprecated. Any reloaders added through this API will be run last.

New API

ReloadableResourceManager has news method for registering identifiable resource reloaders and dependencies between them:

// still exists, but is now deprecated
// all reloaders registered through here will be run last
addReloader(ResourceReloader)

// registers the given reloader with the given identifier
registerReloader(NamespacedIdentifier, ResourceReloader)

// declare a dependency on the reloaders with given identifiers
// this will ensure the given reloader will run *after* all its dependencies
registerReloaderDependencies(NamespacedIdentifier, NamespacedIdentifier...)

OSL will ensure all Vanilla reload listeners are registered as identifiable reloaders. The identifiers used are public API in the AssetsReloaders and DataReloaders classes. These classes also list before_vanilla and after_vanilla markers that can be used to ensure your reloaders run before or after all Vanilla reload listeners.

Example Usage

package com.example;

import net.ornithemc.osl.entrypoints.api.client.ClientModInitializer;
import net.ornithemc.osl.resource.loader.api.client.AssetsReloaders;
import net.ornithemc.osl.resource.loader.api.client.ClientResourceLoaderEvents;

public class ExampleInitializer implements ClientModInitializer {

	@Override
	public void initClient() {
		ClientResourceLoaderEvents.INIT_RESOURCE_MANAGER.register(resourceManager -> {
			resourceManager.registerReloader(EarlyReloader.IDENTIFIER, new EarlyReloader());
			resourceManager.registerReloader(LateReloader.IDENTIFIER, new LateRelloader());

			// BEFORE_VANILLA marker runs before all Vanilla reload listeners
			// register a dependency from it on your own reloader to ensure your own reloader runs first
			resourceManager.registerReloaderDependencies(AssetsReloaders.BEFORE_VANILLA, EarlyReloader.IDENTIFIER);
			// AFTER_VANILLA marker runs after all Vanilla reload listeners
			// register a dependency from your own reloader on it to ensure your own reloader runs last
			resourceManager.registerReloaderDependencies(LateReloader.IDENTIFIER, AssetsReloaders.AFTER_VANILLA);
		});
	}
}

@SpaceWalkerRS SpaceWalkerRS added the enhancement New feature or request label Oct 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant