From 9b144f45416b0bd2b5b67b2ec164175869b04ba3 Mon Sep 17 00:00:00 2001 From: Sara Freimer Date: Wed, 8 Jun 2022 11:08:55 -0500 Subject: [PATCH] Fire registry events in the order vanilla registers to registries (#8677) Custom registries are still fired in alphabetical order, after all vanilla registries. Move forge's data_serializers registry to forge namespace. --- .../minecraft/core/MappedRegistry.java.patch | 18 +++++++++++++++++- .../registries/ForgeRegistries.java | 2 +- .../minecraftforge/registries/GameData.java | 15 +++++---------- .../registries/NamespacedDefaultedWrapper.java | 1 + .../registries/NamespacedWrapper.java | 1 + 5 files changed, 25 insertions(+), 12 deletions(-) diff --git a/patches/minecraft/net/minecraft/core/MappedRegistry.java.patch b/patches/minecraft/net/minecraft/core/MappedRegistry.java.patch index bac6f43e9b..438b38b4a8 100644 --- a/patches/minecraft/net/minecraft/core/MappedRegistry.java.patch +++ b/patches/minecraft/net/minecraft/core/MappedRegistry.java.patch @@ -1,6 +1,22 @@ --- a/net/minecraft/core/MappedRegistry.java +++ b/net/minecraft/core/MappedRegistry.java -@@ -90,7 +_,8 @@ +@@ -83,14 +_,24 @@ + return this.m_205857_(p_205853_, p_205854_, p_205855_, p_205856_, true); + } + ++ private static final Set KNOWN = new java.util.LinkedHashSet<>(); ++ public static Set getKnownRegistries() { ++ return java.util.Collections.unmodifiableSet(KNOWN); ++ } ++ protected final void markKnown() { ++ KNOWN.add(m_123023_().m_135782_()); ++ } ++ + private Holder m_205857_(int p_205858_, ResourceKey p_205859_, T p_205860_, Lifecycle p_205861_, boolean p_205862_) { ++ markKnown(); + this.m_205921_(p_205859_); + Validate.notNull(p_205859_); + Validate.notNull(p_205860_); this.f_122672_.size(Math.max(this.f_122672_.size(), p_205858_ + 1)); this.f_122673_.put(p_205860_, p_205858_); this.f_211051_ = null; diff --git a/src/main/java/net/minecraftforge/registries/ForgeRegistries.java b/src/main/java/net/minecraftforge/registries/ForgeRegistries.java index 5b63fcf8ba..2d82acdde9 100644 --- a/src/main/java/net/minecraftforge/registries/ForgeRegistries.java +++ b/src/main/java/net/minecraftforge/registries/ForgeRegistries.java @@ -142,7 +142,7 @@ public class ForgeRegistries public static final ResourceKey> BIOMES = key("worldgen/biome"); // Forge - public static final ResourceKey>> DATA_SERIALIZERS = key("data_serializers"); + public static final ResourceKey>> DATA_SERIALIZERS = key("forge:data_serializers"); public static final ResourceKey>> LOOT_MODIFIER_SERIALIZERS = key("forge:loot_modifier_serializers"); public static final ResourceKey> WORLD_TYPES = key("forge:world_types"); public static final ResourceKey>> BIOME_MODIFIER_SERIALIZERS = key("forge:biome_modifier_serializers"); diff --git a/src/main/java/net/minecraftforge/registries/GameData.java b/src/main/java/net/minecraftforge/registries/GameData.java index 16dc1454c5..dad200d29c 100644 --- a/src/main/java/net/minecraftforge/registries/GameData.java +++ b/src/main/java/net/minecraftforge/registries/GameData.java @@ -12,6 +12,7 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.Maps; import com.google.common.collect.Multimap; import com.mojang.serialization.Lifecycle; +import java.util.LinkedHashSet; import net.minecraft.core.DefaultedRegistry; import net.minecraft.core.IdMapper; import net.minecraft.core.MappedRegistry; @@ -297,20 +298,14 @@ public class GameData Set keySet = new HashSet<>(RegistryManager.ACTIVE.registries.keySet()); keySet.addAll(RegistryManager.getVanillaRegistryKeys()); keySet.addAll(BuiltinRegistries.REGISTRY.keySet()); - List keys = keySet.stream() - .sorted((o1, o2) -> String.valueOf(o1).compareToIgnoreCase(String.valueOf(o2))) - .collect(Collectors.toList()); - //Move Blocks to first, and Items to second. - keys.remove(BLOCKS.location()); - keys.remove(ITEMS.location()); - - keys.add(0, BLOCKS.location()); - keys.add(1, ITEMS.location()); + Set ordered = new LinkedHashSet<>(MappedRegistry.getKnownRegistries()); + ordered.retainAll(keySet); + ordered.addAll(keySet.stream().sorted(ResourceLocation::compareNamespaced).toList()); RuntimeException aggregate = new RuntimeException(); - for (ResourceLocation rootRegistryName : keys) + for (ResourceLocation rootRegistryName : ordered) { try { diff --git a/src/main/java/net/minecraftforge/registries/NamespacedDefaultedWrapper.java b/src/main/java/net/minecraftforge/registries/NamespacedDefaultedWrapper.java index 63bb0e5382..6c89a2cecd 100644 --- a/src/main/java/net/minecraftforge/registries/NamespacedDefaultedWrapper.java +++ b/src/main/java/net/minecraftforge/registries/NamespacedDefaultedWrapper.java @@ -52,6 +52,7 @@ class NamespacedDefaultedWrapper extends DefaultedRegistry implements ILoc throw new IllegalStateException("Can not register to a locked registry. Modder should use Forge Register methods."); Validate.notNull(value); + markKnown(); this.elementsLifecycle = this.elementsLifecycle.add(lifecycle); T oldValue = this.delegate.getRaw(key.location()); diff --git a/src/main/java/net/minecraftforge/registries/NamespacedWrapper.java b/src/main/java/net/minecraftforge/registries/NamespacedWrapper.java index 1cb258a93c..526e295d1e 100644 --- a/src/main/java/net/minecraftforge/registries/NamespacedWrapper.java +++ b/src/main/java/net/minecraftforge/registries/NamespacedWrapper.java @@ -55,6 +55,7 @@ class NamespacedWrapper extends MappedRegistry implements ILockableRegistr throw new IllegalStateException("Can not register to a locked registry. Modder should use Forge Register methods."); Validate.notNull(value); + markKnown(); this.elementsLifecycle = this.elementsLifecycle.add(lifecycle); T oldValue = get(key);