--- a/net/minecraft/client/renderer/color/ItemColors.java
+++ b/net/minecraft/client/renderer/color/ItemColors.java
@@ -22,7 +22,8 @@
 
 @OnlyIn(Dist.CLIENT)
 public class ItemColors {
-   private final ObjectIntIdentityMap<IItemColor> field_186732_a = new ObjectIntIdentityMap<>(32);
+   // FORGE: Use RegistryDelegates as non-Vanilla item ids are not constant
+   private final java.util.Map<net.minecraftforge.registries.IRegistryDelegate<Item>, IItemColor> field_186732_a = new java.util.HashMap<>();
 
    public static ItemColors func_186729_a(BlockColors p_186729_0_) {
       ItemColors itemcolors = new ItemColors();
@@ -82,17 +83,18 @@
       itemcolors.func_199877_a((p_210237_0_, p_210237_1_) -> {
          return p_210237_1_ == 0 ? -1 : FilledMapItem.func_190907_h(p_210237_0_);
       }, Items.field_151098_aY);
+      net.minecraftforge.client.ForgeHooksClient.onItemColorsInit(itemcolors, p_186729_0_);
       return itemcolors;
    }
 
    public int func_186728_a(ItemStack p_186728_1_, int p_186728_2_) {
-      IItemColor iitemcolor = this.field_186732_a.func_148745_a(Registry.field_212630_s.func_148757_b(p_186728_1_.func_77973_b()));
+      IItemColor iitemcolor = this.field_186732_a.get(p_186728_1_.func_77973_b().delegate);
       return iitemcolor == null ? -1 : iitemcolor.getColor(p_186728_1_, p_186728_2_);
    }
 
    public void func_199877_a(IItemColor p_199877_1_, IItemProvider... p_199877_2_) {
       for(IItemProvider iitemprovider : p_199877_2_) {
-         this.field_186732_a.func_148746_a(p_199877_1_, Item.func_150891_b(iitemprovider.func_199767_j()));
+         this.field_186732_a.put(iitemprovider.func_199767_j().delegate, p_199877_1_);
       }
 
    }
