mirror of
https://github.com/MinecraftForge/MinecraftForge.git
synced 2026-11-12 08:17:35 +00:00
Modify how ModLoadingStage handles dispatch to Registry Events. Stops the objectholder spam and generally improves performance on larger packs.
Signed-off-by: cpw <cpw+github@weeksfamily.ca>
This commit is contained in:
4 files changed
+52
-45
No files matched your search
@@ -22,8 +22,8 @@ package net.minecraftforge.registries;
|
||||
import com.google.common.collect.*;
|
||||
import com.mojang.serialization.Lifecycle;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
|
||||
import net.minecraft.block.AirBlock;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockState;
|
||||
@@ -92,12 +92,8 @@ import org.apache.logging.log4j.Logger;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.Collection;
|
||||
import java.util.IdentityHashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.function.BiConsumer;
|
||||
import java.util.function.BiFunction;
|
||||
import java.util.function.Function;
|
||||
@@ -346,22 +342,30 @@ public class GameData
|
||||
keys.add(0, BLOCKS.func_240901_a_());
|
||||
keys.add(1, ITEMS.func_240901_a_());
|
||||
|
||||
final Function<ResourceLocation, ? extends RegistryEvent.Register<?>> modContainerEventGeneratorFunction = rl -> RegistryManager.ACTIVE.getRegistry(rl).getRegisterEvent(rl);
|
||||
return keys.stream().map(rl -> ModLoadingStage.EventGenerator.fromFunction(mc -> modContainerEventGeneratorFunction.apply(rl)));
|
||||
final Function<ResourceLocation, ? extends RegistryEvent.Register<?>> registerEventGenerator = rl -> RegistryManager.ACTIVE.getRegistry(rl).getRegisterEvent(rl);
|
||||
return keys.stream().map(rl -> ModLoadingStage.EventGenerator.fromFunction(mc -> registerEventGenerator.apply(rl)));
|
||||
}
|
||||
|
||||
public static ModLoadingStage.EventDispatcher<RegistryEvent.Register<?>> buildRegistryEventDispatch() {
|
||||
return eventConsumer -> eventToSend -> {
|
||||
final ResourceLocation rl = eventToSend.getName();
|
||||
ForgeRegistry<?> fr = (ForgeRegistry<?>) eventToSend.getRegistry();
|
||||
StartupMessageManager.modLoaderConsumer().ifPresent(s->s.accept("REGISTERING "+rl));
|
||||
fr.unfreeze();
|
||||
eventConsumer.accept(eventToSend);
|
||||
public static CompletableFuture<List<Throwable>> preRegistryEventDispatch(final Executor executor, final ModLoadingStage.EventGenerator<? extends RegistryEvent.Register<?>> eventGenerator) {
|
||||
return CompletableFuture.runAsync(()-> {
|
||||
final RegistryEvent.Register<?> event = eventGenerator.apply(null);
|
||||
final ResourceLocation rl = event.getName();
|
||||
ForgeRegistry<?> fr = (ForgeRegistry<?>) event.getRegistry();
|
||||
StartupMessageManager.modLoaderConsumer().ifPresent(s -> s.accept("REGISTERING " + rl));
|
||||
fr.unfreeze();
|
||||
}, executor).thenApply(v->Collections.emptyList());
|
||||
}
|
||||
|
||||
public static CompletableFuture<List<Throwable>> postRegistryEventDispatch(final Executor executor, final ModLoadingStage.EventGenerator<? extends RegistryEvent.Register<?>> eventGenerator) {
|
||||
return CompletableFuture.runAsync(()-> {
|
||||
final RegistryEvent.Register<?> event = eventGenerator.apply(null);
|
||||
final ResourceLocation rl = event.getName();
|
||||
ForgeRegistry<?> fr = (ForgeRegistry<?>) event.getRegistry();
|
||||
fr.freeze();
|
||||
LOGGER.debug(REGISTRIES,"Applying holder lookups: {}", rl.toString());
|
||||
LOGGER.debug(REGISTRIES, "Applying holder lookups: {}", rl.toString());
|
||||
ObjectHolderRegistry.applyObjectHolders(rl::equals);
|
||||
LOGGER.debug(REGISTRIES,"Holder lookups applied: {}", rl.toString());
|
||||
};
|
||||
LOGGER.debug(REGISTRIES, "Holder lookups applied: {}", rl.toString());
|
||||
}, executor).thenApply(v->Collections.emptyList());
|
||||
}
|
||||
|
||||
public static void setCustomTagTypesFromRegistries()
|
||||
|
||||
Reference in new issue
Block a user