From c783d007b13dbda510eb28bde397bc3507b8d351 Mon Sep 17 00:00:00 2001 From: Frank Date: Fri, 18 Mar 2022 20:44:50 +0100 Subject: [PATCH] Fixed MultiPackResourceManagerMixin --- .../client/MultiPackResourceManagerMixin.java | 53 +++++++++++++++++++ .../SimpleReloadableResourceManagerMixin.java | 53 ------------------- .../common/MultiPackResourceManagerMixin.java | 30 +++++++++++ .../SimpleReloadableResourceManagerMixin.java | 39 -------------- 4 files changed, 83 insertions(+), 92 deletions(-) create mode 100644 src/main/java/ru/bclib/mixin/client/MultiPackResourceManagerMixin.java delete mode 100644 src/main/java/ru/bclib/mixin/client/SimpleReloadableResourceManagerMixin.java create mode 100644 src/main/java/ru/bclib/mixin/common/MultiPackResourceManagerMixin.java delete mode 100644 src/main/java/ru/bclib/mixin/common/SimpleReloadableResourceManagerMixin.java diff --git a/src/main/java/ru/bclib/mixin/client/MultiPackResourceManagerMixin.java b/src/main/java/ru/bclib/mixin/client/MultiPackResourceManagerMixin.java new file mode 100644 index 00000000..f2bc7b61 --- /dev/null +++ b/src/main/java/ru/bclib/mixin/client/MultiPackResourceManagerMixin.java @@ -0,0 +1,53 @@ +package ru.bclib.mixin.client; + +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.packs.resources.FallbackResourceManager; +import net.minecraft.server.packs.resources.MultiPackResourceManager; +import net.minecraft.server.packs.resources.Resource; +import net.minecraft.server.packs.resources.ResourceManager; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import ru.bclib.BCLib; +import ru.bclib.api.ModIntegrationAPI; +import ru.bclib.client.render.EmissiveTextureInfo; + +import java.io.IOException; +import java.util.Map; + +@Mixin(MultiPackResourceManager.class) +public class MultiPackResourceManagerMixin { + @Final + @Shadow + private Map namespacedManagers; + + private ResourceLocation bclib_alphaEmissionMaterial = BCLib.makeID("materialmaps/block/alpha_emission.json"); + + @Inject(method = "getResource", at = @At("HEAD"), cancellable = true) + private void bclib_getResource(ResourceLocation resourceLocation, CallbackInfoReturnable info) throws IOException { + if (!ModIntegrationAPI.hasCanvas()) { + return; + } + if (!resourceLocation.getPath().startsWith("materialmaps")) { + return; + } + if (!resourceLocation.getPath().contains("/block/")) { + return; + } + + String name = resourceLocation.getPath().replace("materialmaps/block/", "").replace(".json", ""); + ResourceLocation blockID = new ResourceLocation(resourceLocation.getNamespace(), name); + + if (!EmissiveTextureInfo.isEmissiveBlock(blockID)) { + return; + } + + ResourceManager resourceManager = this.namespacedManagers.get(resourceLocation.getNamespace()); + if (resourceManager != null && !resourceManager.hasResource(resourceLocation)) { + info.setReturnValue(resourceManager.getResource(bclib_alphaEmissionMaterial)); + } + } +} diff --git a/src/main/java/ru/bclib/mixin/client/SimpleReloadableResourceManagerMixin.java b/src/main/java/ru/bclib/mixin/client/SimpleReloadableResourceManagerMixin.java deleted file mode 100644 index 594d71f2..00000000 --- a/src/main/java/ru/bclib/mixin/client/SimpleReloadableResourceManagerMixin.java +++ /dev/null @@ -1,53 +0,0 @@ -package ru.bclib.mixin.client; - -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.packs.resources.FallbackResourceManager; -import net.minecraft.server.packs.resources.Resource; -import net.minecraft.server.packs.resources.ResourceManager; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import ru.bclib.BCLib; -import ru.bclib.api.ModIntegrationAPI; -import ru.bclib.client.render.EmissiveTextureInfo; - -import java.io.IOException; -import java.util.Map; - -//TODO: 1.18.2 Disabled to have a compilable Version -//@Mixin(SimpleReloadableResourceManager.class) -//public class SimpleReloadableResourceManagerMixin { -// @Final -// @Shadow -// private Map namespacedPacks; -// -// private ResourceLocation bclib_alphaEmissionMaterial = BCLib.makeID("materialmaps/block/alpha_emission.json"); -// -// @Inject(method = "getResource", at = @At("HEAD"), cancellable = true) -// private void bclib_getResource(ResourceLocation resourceLocation, CallbackInfoReturnable info) throws IOException { -// if (!ModIntegrationAPI.hasCanvas()) { -// return; -// } -// if (!resourceLocation.getPath().startsWith("materialmaps")) { -// return; -// } -// if (!resourceLocation.getPath().contains("/block/")) { -// return; -// } -// -// String name = resourceLocation.getPath().replace("materialmaps/block/", "").replace(".json", ""); -// ResourceLocation blockID = new ResourceLocation(resourceLocation.getNamespace(), name); -// -// if (!EmissiveTextureInfo.isEmissiveBlock(blockID)) { -// return; -// } -// -// ResourceManager resourceManager = this.namespacedPacks.get(resourceLocation.getNamespace()); -// if (resourceManager != null && !resourceManager.hasResource(resourceLocation)) { -// info.setReturnValue(resourceManager.getResource(bclib_alphaEmissionMaterial)); -// } -// } -//} diff --git a/src/main/java/ru/bclib/mixin/common/MultiPackResourceManagerMixin.java b/src/main/java/ru/bclib/mixin/common/MultiPackResourceManagerMixin.java new file mode 100644 index 00000000..09365589 --- /dev/null +++ b/src/main/java/ru/bclib/mixin/common/MultiPackResourceManagerMixin.java @@ -0,0 +1,30 @@ +package ru.bclib.mixin.common; + +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.packs.resources.MultiPackResourceManager; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(MultiPackResourceManager.class) +public class MultiPackResourceManagerMixin { + private static final String[] BCLIB_MISSING_RESOURCES = new String[] { + "dimension/the_end.json", + "dimension/the_nether.json", + "dimension_type/the_end.json", + "dimension_type/the_nether.json" + }; + + @Inject(method = "hasResource", at = @At("HEAD"), cancellable = true) + private void bclib_hasResource(ResourceLocation resourceLocation, CallbackInfoReturnable info) { + if (resourceLocation.getNamespace().equals("minecraft")) { + for (String key: BCLIB_MISSING_RESOURCES) { + if (resourceLocation.getPath().equals(key)) { + info.setReturnValue(false); + return; + } + } + } + } +} diff --git a/src/main/java/ru/bclib/mixin/common/SimpleReloadableResourceManagerMixin.java b/src/main/java/ru/bclib/mixin/common/SimpleReloadableResourceManagerMixin.java deleted file mode 100644 index 3b78fdbc..00000000 --- a/src/main/java/ru/bclib/mixin/common/SimpleReloadableResourceManagerMixin.java +++ /dev/null @@ -1,39 +0,0 @@ -package ru.bclib.mixin.common; - -import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.packs.resources.FallbackResourceManager; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -import java.util.Map; - -//TODO: 1.18.2 Disabled to have a compilable Version -//@Mixin(SimpleReloadableResourceManager.class) -//public class SimpleReloadableResourceManagerMixin { -// @Final -// @Shadow -// private Map namespacedPacks; -// -// private static final String[] BCLIB_MISSING_RESOURCES = new String[] { -// "dimension/the_end.json", -// "dimension/the_nether.json", -// "dimension_type/the_end.json", -// "dimension_type/the_nether.json" -// }; -// -// @Inject(method = "hasResource", at = @At("HEAD"), cancellable = true) -// private void bclib_hasResource(ResourceLocation resourceLocation, CallbackInfoReturnable info) { -// if (resourceLocation.getNamespace().equals("minecraft")) { -// for (String key: BCLIB_MISSING_RESOURCES) { -// if (resourceLocation.getPath().equals(key)) { -// info.setReturnValue(false); -// return; -// } -// } -// } -// } -//}