diff options
author | Linnea Gräf <nea@nea.moe> | 2024-03-14 18:58:22 +0100 |
---|---|---|
committer | Linnea Gräf <nea@nea.moe> | 2024-03-14 18:58:22 +0100 |
commit | 4bf53dcaf18dcc1fb7b064f482b2e8922d9d326f (patch) | |
tree | f163e9f9a58eaa5000da4cfa23ccc7e54f231dc5 /src/main | |
parent | b025b06b6b799b16cfcfb26ee8ffad27879a1bfb (diff) | |
download | Firmament-4bf53dcaf18dcc1fb7b064f482b2e8922d9d326f.tar.gz Firmament-4bf53dcaf18dcc1fb7b064f482b2e8922d9d326f.tar.bz2 Firmament-4bf53dcaf18dcc1fb7b064f482b2e8922d9d326f.zip |
Bandaid fix resources not being loade for june
[no changelog]
Diffstat (limited to 'src/main')
3 files changed, 54 insertions, 0 deletions
diff --git a/src/main/java/moe/nea/firmament/mixins/BandAidResourcePackPatch.java b/src/main/java/moe/nea/firmament/mixins/BandAidResourcePackPatch.java new file mode 100644 index 0000000..3100dbe --- /dev/null +++ b/src/main/java/moe/nea/firmament/mixins/BandAidResourcePackPatch.java @@ -0,0 +1,30 @@ +/* + * SPDX-FileCopyrightText: 2024 Linnea Gräf <nea@nea.moe> + * + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +package moe.nea.firmament.mixins; + +import com.llamalad7.mixinextras.injector.ModifyReturnValue; +import com.llamalad7.mixinextras.sugar.Local; +import moe.nea.firmament.repo.RepoModResourcePack; +import net.minecraft.resource.ReloadableResourceManagerImpl; +import net.minecraft.resource.Resource; +import net.minecraft.util.Identifier; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +import java.util.Optional; + +@Mixin(ReloadableResourceManagerImpl.class) +public class BandAidResourcePackPatch { + + @ModifyReturnValue( + method = "getResource", + at = @At("RETURN") + ) + private Optional<Resource> injectOurCustomResourcesInCaseExistingMethodsFailed(Optional<Resource> original, @Local Identifier identifier) { + return original.or(() -> RepoModResourcePack.Companion.createResourceDirectly(identifier)); + } +} diff --git a/src/main/kotlin/moe/nea/firmament/repo/RepoModResourcePack.kt b/src/main/kotlin/moe/nea/firmament/repo/RepoModResourcePack.kt index c511c90..810e2a4 100644 --- a/src/main/kotlin/moe/nea/firmament/repo/RepoModResourcePack.kt +++ b/src/main/kotlin/moe/nea/firmament/repo/RepoModResourcePack.kt @@ -9,6 +9,7 @@ package moe.nea.firmament.repo import java.io.InputStream import java.nio.file.Files import java.nio.file.Path +import java.util.* import net.fabricmc.fabric.api.resource.ModResourcePack import net.fabricmc.loader.api.FabricLoader import net.fabricmc.loader.api.metadata.ModMetadata @@ -18,17 +19,39 @@ import kotlin.io.path.relativeTo import kotlin.streams.asSequence import net.minecraft.resource.AbstractFileResourcePack import net.minecraft.resource.InputSupplier +import net.minecraft.resource.NamespaceResourceManager +import net.minecraft.resource.Resource import net.minecraft.resource.ResourcePack import net.minecraft.resource.ResourceType +import net.minecraft.resource.metadata.ResourceMetadata import net.minecraft.resource.metadata.ResourceMetadataReader import net.minecraft.util.Identifier import net.minecraft.util.PathUtil +import moe.nea.firmament.Firmament class RepoModResourcePack(val basePath: Path) : ModResourcePack { companion object { fun append(packs: MutableList<in ModResourcePack>) { + Firmament.logger.info("Registering mod resource pack") packs.add(RepoModResourcePack(RepoDownloadManager.repoSavedLocation)) } + + fun createResourceDirectly(identifier: Identifier): Optional<Resource> { + val pack = RepoModResourcePack(RepoDownloadManager.repoSavedLocation) + return Optional.of( + Resource( + pack, + pack.open(ResourceType.CLIENT_RESOURCES, identifier) ?: return Optional.empty() + ) { + val base = + pack.open(ResourceType.CLIENT_RESOURCES, identifier.withPath(identifier.path + ".mcmeta")) + if (base == null) + ResourceMetadata.NONE + else + NamespaceResourceManager.loadMetadata(base) + } + ) + } } override fun close() { diff --git a/src/main/resources/firmament.accesswidener b/src/main/resources/firmament.accesswidener index 541b152..56d2c36 100644 --- a/src/main/resources/firmament.accesswidener +++ b/src/main/resources/firmament.accesswidener @@ -14,3 +14,4 @@ accessible method net/minecraft/entity/decoration/ArmorStandEntity setSmall (Z)V accessible field net/minecraft/entity/passive/AbstractHorseEntity items Lnet/minecraft/inventory/SimpleInventory; accessible field net/minecraft/entity/passive/AbstractHorseEntity SADDLED_FLAG I accessible field net/minecraft/entity/passive/AbstractHorseEntity HORSE_FLAGS Lnet/minecraft/entity/data/TrackedData; +accessible method net/minecraft/resource/NamespaceResourceManager loadMetadata (Lnet/minecraft/resource/InputSupplier;)Lnet/minecraft/resource/metadata/ResourceMetadata; |