aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/events/FinalizeResourceManagerEvent.kt
blob: 12167f8fefba574dd7e15c3d44f54dae0dd02516 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package moe.nea.firmament.events

import java.util.concurrent.CompletableFuture
import java.util.concurrent.Executor
import net.minecraft.resource.ReloadableResourceManagerImpl
import net.minecraft.resource.ResourceManager
import net.minecraft.resource.ResourceReloader

data class FinalizeResourceManagerEvent(
	val resourceManager: ReloadableResourceManagerImpl,
) : FirmamentEvent() {
	companion object : FirmamentEventBus<FinalizeResourceManagerEvent>()

	inline fun registerOnApply(name: String, crossinline function: () -> Unit) {
		resourceManager.registerReloader(object : ResourceReloader {
			override fun reload(
				synchronizer: ResourceReloader.Synchronizer,
				manager: ResourceManager,
				prepareExecutor: Executor,
				applyExecutor: Executor
			): CompletableFuture<Void> {
				return CompletableFuture.completedFuture(Unit)
					.thenCompose(synchronizer::whenPrepared)
					.thenAcceptAsync({ function() }, applyExecutor)
			}

			override fun getName(): String {
				return name
			}
		})
	}
}