aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/events/FinalizeResourceManagerEvent.kt
blob: 72fa9c431be5618f2fbf46e44c9feaa5d0ce7bd8 (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.server.packs.resources.ReloadableResourceManager
import net.minecraft.server.packs.resources.ResourceManager
import net.minecraft.server.packs.resources.PreparableReloadListener

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

	inline fun registerOnApply(name: String, crossinline function: () -> Unit) {
		resourceManager.registerReloadListener(object : PreparableReloadListener {
			override fun reload(
                store: PreparableReloadListener.SharedState,
                prepareExecutor: Executor,
                reloadSynchronizer: PreparableReloadListener.PreparationBarrier,
                applyExecutor: Executor
			): CompletableFuture<Void> {
				return CompletableFuture.completedFuture(Unit)
					.thenCompose(reloadSynchronizer::wait)
					.thenAcceptAsync({ function() }, applyExecutor)
			}

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