From 73c6a2a9c27ec12777b88905e40285e6c5d27a7e Mon Sep 17 00:00:00 2001 From: asie <kontakt@asie.pl> Date: Thu, 29 Nov 2018 10:07:10 +0100 Subject: [PATCH] further datapack loading tweaks --- .../mixin/resources/MixinMinecraftServer.java | 11 +------- .../fabric/resources/ModDataPackSupplier.java | 27 ++++++++++++------- .../resources/ModDirectoryResourcePack.java | 1 + .../fabric/resources/ModResourcePack.java | 4 +++ .../fabric/resources/ModZipResourcePack.java | 1 + 5 files changed, 24 insertions(+), 20 deletions(-) diff --git a/src/main/java/net/fabricmc/fabric/mixin/resources/MixinMinecraftServer.java b/src/main/java/net/fabricmc/fabric/mixin/resources/MixinMinecraftServer.java index 232e003a3..ecc7b01e6 100644 --- a/src/main/java/net/fabricmc/fabric/mixin/resources/MixinMinecraftServer.java +++ b/src/main/java/net/fabricmc/fabric/mixin/resources/MixinMinecraftServer.java @@ -45,15 +45,6 @@ public class MixinMinecraftServer { @Inject(method = "method_3800", at = @At(value = "INVOKE", target = "Lnet/minecraft/class_3283;method_14443(Lnet/minecraft/class_3285;)V", ordinal = 1)) public void method_3800(File file, LevelProperties properties, CallbackInfo info) { - // TODO: "vanilla" does not emit a message; neither should a modded datapack - List<ResourcePack> packs = new ArrayList<>(); - ModResourcePackUtil.appendModResourcePacks(packs, ResourceType.DATA); - for (ResourcePack pack : packs) { - if (!(pack instanceof ModResourcePack)) { - throw new RuntimeException("Not a ModResourcePack!"); - } - - field_4595.method_14443(new ModDataPackSupplier((ModResourcePack) pack)); - } + field_4595.method_14443(new ModDataPackSupplier()); } } diff --git a/src/main/java/net/fabricmc/fabric/resources/ModDataPackSupplier.java b/src/main/java/net/fabricmc/fabric/resources/ModDataPackSupplier.java index 8d63f9132..1c8737652 100644 --- a/src/main/java/net/fabricmc/fabric/resources/ModDataPackSupplier.java +++ b/src/main/java/net/fabricmc/fabric/resources/ModDataPackSupplier.java @@ -18,23 +18,30 @@ package net.fabricmc.fabric.resources; import net.minecraft.class_3285; import net.minecraft.class_3288; +import net.minecraft.resource.ResourcePack; +import net.minecraft.resource.ResourceType; +import java.util.ArrayList; +import java.util.List; import java.util.Map; public class ModDataPackSupplier implements class_3285 { - private final ModResourcePack pack; - - public ModDataPackSupplier(ModResourcePack pack) { - this.pack = pack; - } - @Override public <T extends class_3288> void method_14453(Map<String, T> map, class_3288.class_3290<T> class_3290) { - T var3 = class_3288.method_14456("fabric:" + pack.getModInfo().getId(), - false, () -> this.pack, class_3290, class_3288.class_3289.BOTTOM); + // TODO: "vanilla" does not emit a message; neither should a modded datapack + List<ResourcePack> packs = new ArrayList<>(); + ModResourcePackUtil.appendModResourcePacks(packs, ResourceType.DATA); + for (ResourcePack pack : packs) { + if (!(pack instanceof ModResourcePack)) { + throw new RuntimeException("Not a ModResourcePack!"); + } - if (var3 != null) { - map.put(var3.method_14463(), var3); + T var3 = class_3288.method_14456("fabric/" + ((ModResourcePack) pack).getModInfo().getId(), + false, () -> pack, class_3290, class_3288.class_3289.BOTTOM); + + if (var3 != null) { + map.put(var3.method_14463(), var3); + } } } } diff --git a/src/main/java/net/fabricmc/fabric/resources/ModDirectoryResourcePack.java b/src/main/java/net/fabricmc/fabric/resources/ModDirectoryResourcePack.java index 2f3d234d1..9a4e2d81a 100644 --- a/src/main/java/net/fabricmc/fabric/resources/ModDirectoryResourcePack.java +++ b/src/main/java/net/fabricmc/fabric/resources/ModDirectoryResourcePack.java @@ -19,6 +19,7 @@ package net.fabricmc.fabric.resources; import net.fabricmc.loader.ModInfo; import net.minecraft.resource.DirectoryResourcePack; import net.minecraft.resource.ResourceNotFoundException; +import net.minecraft.resource.ResourceType; import java.io.*; diff --git a/src/main/java/net/fabricmc/fabric/resources/ModResourcePack.java b/src/main/java/net/fabricmc/fabric/resources/ModResourcePack.java index 9b5609aa8..d8085f801 100644 --- a/src/main/java/net/fabricmc/fabric/resources/ModResourcePack.java +++ b/src/main/java/net/fabricmc/fabric/resources/ModResourcePack.java @@ -18,7 +18,11 @@ package net.fabricmc.fabric.resources; import net.fabricmc.loader.ModInfo; import net.minecraft.resource.ResourcePack; +import net.minecraft.resource.ResourceType; public interface ModResourcePack extends ResourcePack { ModInfo getModInfo(); + default boolean provides(ResourceType type) { + return true; + } } diff --git a/src/main/java/net/fabricmc/fabric/resources/ModZipResourcePack.java b/src/main/java/net/fabricmc/fabric/resources/ModZipResourcePack.java index 6521ee454..c656ed53f 100644 --- a/src/main/java/net/fabricmc/fabric/resources/ModZipResourcePack.java +++ b/src/main/java/net/fabricmc/fabric/resources/ModZipResourcePack.java @@ -19,6 +19,7 @@ package net.fabricmc.fabric.resources; import com.google.common.io.ByteStreams; import net.fabricmc.loader.ModInfo; import net.minecraft.resource.ResourceNotFoundException; +import net.minecraft.resource.ResourceType; import net.minecraft.resource.ZipResourcePack; import java.io.File;