diff --git a/src/main/java/com/replaymod/core/mixin/Mixin_HideDynamicResourcePacks.java b/src/main/java/com/replaymod/core/mixin/Mixin_HideDynamicResourcePacks.java deleted file mode 100644 index 853c9cd4..00000000 --- a/src/main/java/com/replaymod/core/mixin/Mixin_HideDynamicResourcePacks.java +++ /dev/null @@ -1,37 +0,0 @@ -//#if FABRIC>=1 -package com.replaymod.core.mixin; - -import net.minecraft.client.gui.screen.pack.PackListWidget; -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.CallbackInfo; - -//#if MC>=11600 -import net.minecraft.client.gui.screen.pack.PackScreen; -import net.minecraft.client.gui.screen.pack.ResourcePackOrganizer; -//#else -//$$ import net.minecraft.client.resource.ClientResourcePackProfile; -//#endif - -//#if MC>=11600 -@Mixin(PackScreen.class) -//#else -//$$ @Mixin(ResourcePackListWidget.class) -//#endif -public abstract class Mixin_HideDynamicResourcePacks { - //#if MC>=11600 - @Inject(method = "method_29672", at = @At("HEAD"), cancellable = true) - private void hideInternalPacks(PackListWidget packListWidget, ResourcePackOrganizer.Pack pack, CallbackInfo info) { - //#else - //$$ @Inject(method = "add", at = @At("HEAD"), cancellable = true) - //$$ private void hideInternalPacks(ResourcePackListWidget.ResourcePackEntry entry, CallbackInfo info) { - //$$ ClientResourcePackProfile pack = entry.getPack(); - //#endif - String name = pack.getDisplayName().asString(); - if (name.equals("replaymod_lang") || name.equals("replaymod_jgui")) { - info.cancel(); - } - } -} -//#endif diff --git a/src/main/java/com/replaymod/core/mixin/Mixin_InjectDynamicResourcePacks.java b/src/main/java/com/replaymod/core/mixin/Mixin_InjectDynamicResourcePacks.java new file mode 100644 index 00000000..6078c41c --- /dev/null +++ b/src/main/java/com/replaymod/core/mixin/Mixin_InjectDynamicResourcePacks.java @@ -0,0 +1,52 @@ +//#if FABRIC>=1 +package com.replaymod.core.mixin; + +import com.replaymod.core.ReplayMod; +import com.replaymod.core.versions.LangResourcePack; +import net.minecraft.resource.ResourcePack; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyArg; + +import java.util.function.BiConsumer; +import java.util.stream.Collector; + + +//#if MC>=11600 +@Mixin(net.minecraft.resource.ResourcePackManager.class) +//#else +//$$ @Mixin(net.minecraft.client.MinecraftClient.class) +//#endif +public class Mixin_InjectDynamicResourcePacks { + @ModifyArg( + //#if MC>=11600 + method = "createResourcePacks", + //#elseif MC>=11500 + //$$ method = { "", "reloadResources" }, + //#else + //$$ method = { "init", "reloadResources" }, + //#endif + at = @At(value = "INVOKE", target = "Ljava/util/stream/Stream;collect(Ljava/util/stream/Collector;)Ljava/lang/Object;") + ) + private Collector injectReplayModPacks(Collector collector) { + collector = append(collector, new LangResourcePack()); + if (ReplayMod.jGuiResourcePack != null) { + collector = append(collector, ReplayMod.jGuiResourcePack); + } + return collector; + } + + private static Collector append(Collector collector, T value) { + BiConsumer accumulator = collector.accumulator(); + return Collector.of( + collector.supplier(), + accumulator, + collector.combiner(), + result -> { + accumulator.accept(result, value); + return collector.finisher().apply(result); + } + ); + } +} +//#endif diff --git a/src/main/java/com/replaymod/core/mixin/Mixin_RegisterDynamicResourcePacks.java b/src/main/java/com/replaymod/core/mixin/Mixin_RegisterDynamicResourcePacks.java deleted file mode 100644 index fde3a013..00000000 --- a/src/main/java/com/replaymod/core/mixin/Mixin_RegisterDynamicResourcePacks.java +++ /dev/null @@ -1,56 +0,0 @@ -//#if FABRIC>=1 -package com.replaymod.core.mixin; - -import com.replaymod.core.ReplayMod; -import com.replaymod.core.versions.LangResourcePack; -import net.minecraft.client.resource.ClientBuiltinResourcePackProvider; -import net.minecraft.resource.ResourcePackProfile; -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.CallbackInfo; - -import java.util.function.Consumer; - -//#if MC>=11600 -import net.minecraft.resource.ResourcePackSource; -//#else -//$$ import java.util.Map; -//#endif - -@Mixin(ClientBuiltinResourcePackProvider.class) -public class Mixin_RegisterDynamicResourcePacks { - @Inject(method = "register", at = @At("RETURN")) - //#if MC>=11600 - private void registerReplayMod(Consumer consumer, ResourcePackProfile.Factory factory, CallbackInfo ci) { - //#else - //$$ private void registerReplayMod(Map map, ResourcePackProfile.Factory factory, CallbackInfo ci) { - //$$ Consumer consumer = (pack) -> map.put(pack.getName(), pack); - //#endif - - consumer.accept(ResourcePackProfile.of( - LangResourcePack.NAME, - true, - LangResourcePack::new, - factory, - ResourcePackProfile.InsertionPosition.BOTTOM - //#if MC>=11600 - , ResourcePackSource.PACK_SOURCE_BUILTIN - //#endif - )); - - if (ReplayMod.jGuiResourcePack != null) { - consumer.accept(ResourcePackProfile.of( - ReplayMod.JGUI_RESOURCE_PACK_NAME, - true, - () -> ReplayMod.jGuiResourcePack, - factory, - ResourcePackProfile.InsertionPosition.BOTTOM - //#if MC>=11600 - , ResourcePackSource.PACK_SOURCE_BUILTIN - //#endif - )); - } - } -} -//#endif diff --git a/src/main/resources/mixins.core.replaymod.json b/src/main/resources/mixins.core.replaymod.json index c0b0a787..d1232a20 100644 --- a/src/main/resources/mixins.core.replaymod.json +++ b/src/main/resources/mixins.core.replaymod.json @@ -8,8 +8,7 @@ //#if MC>=11400 "AbstractButtonWidgetAccessor", "MixinGameRenderer", - "Mixin_HideDynamicResourcePacks", - "Mixin_RegisterDynamicResourcePacks", + "Mixin_InjectDynamicResourcePacks", //#endif //#if MC>=11400 "MixinMouse",