[ci skip] Fix #340 (#341)

This commit is contained in:
shedaniel
2022-10-23 01:02:39 +08:00
committed by GitHub
parent 0138323e7d
commit d26471de0e
3 changed files with 27 additions and 4 deletions

View File

@@ -20,15 +20,28 @@
package dev.architectury.registry; package dev.architectury.registry;
import dev.architectury.injectables.annotations.ExpectPlatform; import dev.architectury.injectables.annotations.ExpectPlatform;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.packs.PackType; import net.minecraft.server.packs.PackType;
import net.minecraft.server.packs.resources.PreparableReloadListener; import net.minecraft.server.packs.resources.PreparableReloadListener;
import javax.annotation.Nullable;
import java.util.Collection;
import java.util.List;
public final class ReloadListenerRegistry { public final class ReloadListenerRegistry {
private ReloadListenerRegistry() { private ReloadListenerRegistry() {
} }
@ExpectPlatform
public static void register(PackType type, PreparableReloadListener listener) { public static void register(PackType type, PreparableReloadListener listener) {
register(type, listener, null);
}
public static void register(PackType type, PreparableReloadListener listener, @Nullable ResourceLocation listenerId) {
register(type, listener, listenerId, List.of());
}
@ExpectPlatform
public static void register(PackType type, PreparableReloadListener listener, @Nullable ResourceLocation listenerId, Collection<ResourceLocation> dependencies) {
throw new AssertionError(); throw new AssertionError();
} }
} }

View File

@@ -29,17 +29,19 @@ import net.minecraft.server.packs.resources.ResourceManager;
import net.minecraft.util.profiling.ProfilerFiller; import net.minecraft.util.profiling.ProfilerFiller;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import javax.annotation.Nullable;
import java.security.SecureRandom; import java.security.SecureRandom;
import java.util.Collection;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
public class ReloadListenerRegistryImpl { public class ReloadListenerRegistryImpl {
private static final SecureRandom RANDOM = new SecureRandom(); private static final SecureRandom RANDOM = new SecureRandom();
public static void register(PackType type, PreparableReloadListener listener) { public static void register(PackType type, PreparableReloadListener listener, @Nullable ResourceLocation listenerId, Collection<ResourceLocation> dependencies) {
var bytes = new byte[8]; var bytes = new byte[8];
RANDOM.nextBytes(bytes); RANDOM.nextBytes(bytes);
var id = new ResourceLocation("architectury:reload_" + StringUtils.leftPad(Math.abs(Longs.fromByteArray(bytes)) + "", 19, '0')); var id = listenerId != null ? listenerId : new ResourceLocation("architectury:reload_" + StringUtils.leftPad(Math.abs(Longs.fromByteArray(bytes)) + "", 19, '0'));
ResourceManagerHelper.get(type).registerReloadListener(new IdentifiableResourceReloadListener() { ResourceManagerHelper.get(type).registerReloadListener(new IdentifiableResourceReloadListener() {
@Override @Override
public ResourceLocation getFabricId() { public ResourceLocation getFabricId() {
@@ -51,6 +53,11 @@ public class ReloadListenerRegistryImpl {
return listener.getName(); return listener.getName();
} }
@Override
public Collection<ResourceLocation> getFabricDependencies() {
return dependencies;
}
@Override @Override
public CompletableFuture<Void> reload(PreparationBarrier preparationBarrier, ResourceManager resourceManager, ProfilerFiller profilerFiller, ProfilerFiller profilerFiller2, Executor executor, Executor executor2) { public CompletableFuture<Void> reload(PreparationBarrier preparationBarrier, ResourceManager resourceManager, ProfilerFiller profilerFiller, ProfilerFiller profilerFiller2, Executor executor, Executor executor2) {
return listener.reload(preparationBarrier, resourceManager, profilerFiller, profilerFiller2, executor, executor2); return listener.reload(preparationBarrier, resourceManager, profilerFiller, profilerFiller2, executor, executor2);

View File

@@ -22,6 +22,7 @@ package dev.architectury.registry.forge;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import dev.architectury.forge.ArchitecturyForge; import dev.architectury.forge.ArchitecturyForge;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.packs.PackType; import net.minecraft.server.packs.PackType;
import net.minecraft.server.packs.resources.PreparableReloadListener; import net.minecraft.server.packs.resources.PreparableReloadListener;
import net.minecraft.server.packs.resources.ReloadableResourceManager; import net.minecraft.server.packs.resources.ReloadableResourceManager;
@@ -31,13 +32,15 @@ import net.minecraftforge.event.AddReloadListenerEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod;
import javax.annotation.Nullable;
import java.util.Collection;
import java.util.List; import java.util.List;
@Mod.EventBusSubscriber(modid = ArchitecturyForge.MOD_ID) @Mod.EventBusSubscriber(modid = ArchitecturyForge.MOD_ID)
public class ReloadListenerRegistryImpl { public class ReloadListenerRegistryImpl {
private static List<PreparableReloadListener> serverDataReloadListeners = Lists.newArrayList(); private static List<PreparableReloadListener> serverDataReloadListeners = Lists.newArrayList();
public static void register(PackType type, PreparableReloadListener listener) { public static void register(PackType type, PreparableReloadListener listener, @Nullable ResourceLocation listenerId, Collection<ResourceLocation> dependencies) {
if (type == PackType.SERVER_DATA) { if (type == PackType.SERVER_DATA) {
serverDataReloadListeners.add(listener); serverDataReloadListeners.add(listener);
} else if (type == PackType.CLIENT_RESOURCES) { } else if (type == PackType.CLIENT_RESOURCES) {