Munil Mistera
Munil Mistera

Reputation: 1

Error in minecraft modding: Intrusive holders not registered

When I compile my minecraft mod, it works just fine, but when I run minecraft it crashes:

Time: 2025-02-27 15:21:02
Description: Rendering overlay

java.lang.IllegalStateException: Some intrusive holders were not registered: [Reference{null=air}] Hint: Did you register all your registry objects? Registry stage: ACTIVE
    at net.minecraftforge.registries.NamespacedWrapper.freeze(NamespacedWrapper.java:353) ~[forge-1.20.1-47.3.0_mapped_official_1.20.1.jar%23190%23197!/:?] {re:classloading}
    at net.minecraftforge.registries.GameData.lambda$freezeData$7(GameData.java:246) ~[forge-1.20.1-47.3.0_mapped_official_1.20.1.jar%23190%23197!/:?] {re:classloading}
    at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) ~[?:?] {}
    at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) ~[?:?] {}
    at java.util.Iterator.forEachRemaining(Iterator.java:133) ~[?:?] {}
    at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1845) ~[?:?] {}
    at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) ~[?:?] {}
    at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) ~[?:?] {}
    at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) ~[?:?] {}
    at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) ~[?:?] {}
    at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[?:?] {}
    at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) ~[?:?] {}
    at net.minecraftforge.registries.GameData.freezeData(GameData.java:246) ~[forge-1.20.1-47.3.0_mapped_official_1.20.1.jar%23190%23197!/:?] {re:classloading}
    at net.minecraftforge.common.ForgeStatesProvider.lambda$new$5(ForgeStatesProvider.java:26) ~[forge-1.20.1-47.3.0_mapped_official_1.20.1.jar%23190%23197!/:?] {re:classloading}
    at net.minecraftforge.fml.ModLoader.handleInlineTransition(ModLoader.java:217) ~[fmlcore-1.20.1-47.3.0.jar%23195!/:?] {}
    at net.minecraftforge.fml.ModLoader.lambda$dispatchAndHandleError$19(ModLoader.java:209) ~[fmlcore-1.20.1-47.3.0.jar%23195!/:?] {}
    at java.util.Optional.ifPresent(Optional.java:178) ~[?:?] {}
    at net.minecraftforge.fml.ModLoader.dispatchAndHandleError(ModLoader.java:209) ~[fmlcore-1.20.1-47.3.0.jar%23195!/:?] {}
    at net.minecraftforge.fml.ModLoader.lambda$finishMods$17(ModLoader.java:197) ~[fmlcore-1.20.1-47.3.0.jar%23195!/:?] {}
    at java.lang.Iterable.forEach(Iterable.java:75) ~[?:?] {}
    at net.minecraftforge.fml.ModLoader.finishMods(ModLoader.java:197) ~[fmlcore-1.20.1-47.3.0.jar%23195!/:?] {}
    at net.minecraftforge.client.loading.ClientModLoader.lambda$finishModLoading$6(ClientModLoader.java:102) ~[forge-1.20.1-47.3.0_mapped_official_1.20.1.jar%23190%23197!/:?] {re:classloading,pl:runtimedistcleaner:A}
    at net.minecraftforge.client.loading.ClientModLoader.lambda$createRunnableWithCatch$4(ClientModLoader.java:89) ~[forge-1.20.1-47.3.0_mapped_official_1.20.1.jar%23190%23197!/:?] {re:classloading,pl:runtimedistcleaner:A}
    at net.minecraftforge.client.loading.ClientModLoader.finishModLoading(ClientModLoader.java:102) ~[forge-1.20.1-47.3.0_mapped_official_1.20.1.jar%23190%23197!/:?] {re:classloading,pl:runtimedistcleaner:A}
    at net.minecraftforge.client.loading.ClientModLoader.lambda$onResourceReload$3(ClientModLoader.java:82) ~[forge-1.20.1-47.3.0_mapped_official_1.20.1.jar%23190%23197!/:?] {re:classloading,pl:runtimedistcleaner:A}
    at java.util.concurrent.CompletableFuture$UniRun.tryFire(CompletableFuture.java:787) ~[?:?] {}
    at java.util.concurrent.CompletableFuture$Completion.exec(CompletableFuture.java:483) ~[?:?] {}
    at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373) ~[?:?] {}
    at java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182) ~[?:?] {}
    at java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655) ~[?:?] {}
    at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622) ~[?:?] {}
    at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165) ~[?:?] {}


A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------

-- Head --
Thread: Render thread
Suspected Mods: NONE
Stacktrace:
    at net.minecraftforge.registries.NamespacedWrapper.freeze(NamespacedWrapper.java:353) ~[forge-1.20.1-47.3.0_mapped_official_1.20.1.jar%23190%23197!/:?] {re:classloading}
    at net.minecraftforge.registries.GameData.lambda$freezeData$7(GameData.java:246) ~[forge-1.20.1-47.3.0_mapped_official_1.20.1.jar%23190%23197!/:?] {re:classloading}
    at java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) ~[?:?] {}
    at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179) ~[?:?] {}
    at java.util.Iterator.forEachRemaining(Iterator.java:133) ~[?:?] {}
    at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1845) ~[?:?] {}
    at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509) ~[?:?] {}
    at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) ~[?:?] {}
    at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) ~[?:?] {}
    at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) ~[?:?] {}
    at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[?:?] {}
    at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) ~[?:?] {}
-- Overlay render details --
Details:
    Overlay name: net.minecraftforge.client.loading.ForgeLoadingOverlay
Stacktrace:
    at net.minecraft.client.renderer.GameRenderer.render(GameRenderer.java:957) ~[forge-1.20.1-47.3.0_mapped_official_1.20.1.jar:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}
    at net.minecraft.client.Minecraft.runTick(Minecraft.java:1146) ~[forge-1.20.1-47.3.0_mapped_official_1.20.1.jar:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}
    at net.minecraft.client.Minecraft.run(Minecraft.java:718) ~[forge-1.20.1-47.3.0_mapped_official_1.20.1.jar:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}
    at net.minecraft.client.main.Main.main(Main.java:218) ~[forge-1.20.1-47.3.0_mapped_official_1.20.1.jar:?] {re:classloading,pl:runtimedistcleaner:A}
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?] {}
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?] {}
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?] {}
    at java.lang.reflect.Method.invoke(Method.java:568) ~[?:?] {}
    at net.minecraftforge.fml.loading.targets.CommonLaunchHandler.runTarget(CommonLaunchHandler.java:111) ~[fmlloader-1.20.1-47.3.0.jar:?] {}
    at net.minecraftforge.fml.loading.targets.CommonLaunchHandler.clientService(CommonLaunchHandler.java:99) ~[fmlloader-1.20.1-47.3.0.jar:?] {}
    at net.minecraftforge.fml.loading.targets.ForgeClientUserdevLaunchHandler.devService(ForgeClientUserdevLaunchHandler.java:19) ~[fmlloader-1.20.1-47.3.0.jar:?] {}
    at net.minecraftforge.fml.loading.targets.CommonDevLaunchHandler.lambda$makeService$7(CommonDevLaunchHandler.java:135) ~[fmlloader-1.20.1-47.3.0.jar:?] {}
    at cpw.mods.modlauncher.LaunchServiceHandlerDecorator.launch(LaunchServiceHandlerDecorator.java:30) ~[modlauncher-10.0.9.jar:?] {}
    at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:53) ~[modlauncher-10.0.9.jar:?] {}
    at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:71) ~[modlauncher-10.0.9.jar:?] {}
    at cpw.mods.modlauncher.Launcher.run(Launcher.java:108) ~[modlauncher-10.0.9.jar:?] {}
    at cpw.mods.modlauncher.Launcher.main(Launcher.java:78) ~[modlauncher-10.0.9.jar:?] {}
    at cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:26) ~[modlauncher-10.0.9.jar:?] {}
    at cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:23) ~[modlauncher-10.0.9.jar:?] {}
    at cpw.mods.bootstraplauncher.BootstrapLauncher.main(BootstrapLauncher.java:141) ~[bootstraplauncher-1.1.2.jar:?] {}

I'm using my own utility class for registry, added by my own library which is a dependency:

package com.byabie.mustardlib.util;

import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;
import net.minecraft.world.item.enchantment.Enchantment;
import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.Item;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.effect.MobEffect;
import net.minecraft.world.entity.EntityType;
import net.minecraft.core.particles.ParticleType;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.item.crafting.RecipeType;
import net.minecraft.world.level.biome.Biome;
import net.minecraftforge.eventbus.api.IEventBus;

import java.util.Map;
import java.util.HashMap;

public class Registry {
     private final DeferredRegister<Item> ITEMS;
     private final DeferredRegister<Block> BLOCKS;
     private final DeferredRegister<Enchantment> ENCHANTMENTS;
     private final DeferredRegister<MobEffect> MOBEFFECTS;
     private final DeferredRegister<EntityType<?>> ENTITYTYPES;
     private final DeferredRegister<BlockEntityType<?>> BLOCKENTITYTYPES;
     private final DeferredRegister<Biome> BIOMES;
     private final DeferredRegister<RecipeType<?>> RECIPETYPES;
     private final DeferredRegister<ParticleType<?>> PARTICLETYPES;

     private final Map<String, RegistryObject<Item>> ItemMap = new HashMap<>();
     private final Map<String, RegistryObject<Block>> BlockMap = new HashMap<>();
     private final Map<String, RegistryObject<Enchantment>> EnchantMap = new HashMap<>();
     private final Map<String, RegistryObject<MobEffect>> MobEffectMap = new HashMap<>();
     private final Map<String, RegistryObject<EntityType<?>>> EntityTypeMap = new HashMap<>();
     private final Map<String, RegistryObject<BlockEntityType<?>>> BEntityTypeMap = new HashMap<>();
     private final Map<String, RegistryObject<Biome>> BiomeMap = new HashMap<>();
     private final Map<String, RegistryObject<RecipeType<?>>> RecipeMap = new HashMap<>();
     private final Map<String, RegistryObject<ParticleType<?>>> ParticleMap = new HashMap<>();

     public Registry(String modid) {
          ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, modid);
          BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, modid);
          ENCHANTMENTS = DeferredRegister.create(ForgeRegistries.ENCHANTMENTS, modid);
          MOBEFFECTS = DeferredRegister.create(ForgeRegistries.MOB_EFFECTS, modid);
          ENTITYTYPES = DeferredRegister.create(ForgeRegistries.ENTITY_TYPES, modid);
          BLOCKENTITYTYPES = DeferredRegister.create(ForgeRegistries.BLOCK_ENTITY_TYPES, modid);
          BIOMES = DeferredRegister.create(ForgeRegistries.BIOMES, modid);
          RECIPETYPES = DeferredRegister.create(ForgeRegistries.RECIPE_TYPES, modid);
          PARTICLETYPES = DeferredRegister.create(ForgeRegistries.PARTICLE_TYPES, modid);
     }

     public void initItem(String registryName, Item toRegister) {
         ItemMap.put(registryName, ITEMS.register(registryName, () -> toRegister));
     }
     public void initBlockWithoutItem(String registryName, Block toRegister) {
         BlockMap.put(registryName, BLOCKS.register(registryName, () -> toRegister));
     }
     public void initBlock(String registryName, Block toRegister) { //Use it when you dont want a custom blockItem
         initBlockWithoutItem(registryName, toRegister);
         ItemMap.put(registryName, ITEMS.register(registryName, () -> new BlockItem(toRegister, new Item.Properties())));
     }
     public void initEnchantment(String registryName, Enchantment toRegister) {
         EnchantMap.put(registryName, ENCHANTMENTS.register(registryName, () -> toRegister));
     }
     public void initMobEffect(String registryName, MobEffect toRegister) {
         MobEffectMap.put(registryName, MOBEFFECTS.register(registryName, () -> toRegister));
     }
     public void initEntityType(String registryName, EntityType<?> toRegister) {
         EntityTypeMap.put(registryName, ENTITYTYPES.register(registryName, () -> toRegister));
     }
     public void initBlockEntityType(String registryName, BlockEntityType<?> toRegister) {
         BEntityTypeMap.put(registryName, BLOCKENTITYTYPES.register(registryName, () -> toRegister));
     }
     public void initBiome(String registryName, Biome toRegister) {
         BiomeMap.put(registryName, BIOMES.register(registryName, () -> toRegister));
     }
     public void initRecipeType(String registryName, RecipeType<?> toRegister) {
         RecipeMap.put(registryName, RECIPETYPES.register(registryName, () -> toRegister));
     }
     public void initParticleType(String registryName, ParticleType<?> toRegister) {
         ParticleMap.put(registryName, PARTICLETYPES.register(registryName, () -> toRegister));
     }
     public RegistryObject<?> getItem(String registryName) {
         return ItemMap.get(registryName);
     }
     public RegistryObject<?> getBlock(String registryName) {
         return BlockMap.get(registryName);
     }
     public RegistryObject<?> getEnchant(String registryName) {
         return EnchantMap.get(registryName);
     }
     public RegistryObject<?> getMobEffect(String registryName) {
         return MobEffectMap.get(registryName);
     }
     public RegistryObject<?> getEntityType(String registryName) {
         return EntityTypeMap.get(registryName);
     }
     public RegistryObject<?> getBEntityType(String registryName) {
         return BEntityTypeMap.get(registryName);
     }
     public RegistryObject<?> getBiome(String registryName) {
         return BiomeMap.get(registryName);
     }
     public RegistryObject<?> getRecipeType(String registryName) {
         return RecipeMap.get(registryName);
     }
     public RegistryObject<?> getParticleType(String registryName) {
         return ParticleMap.get(registryName);
     }
     public void register(IEventBus modBus) {
         ITEMS.register(modBus);
         BLOCKS.register(modBus);
         ENCHANTMENTS.register(modBus);
         MOBEFFECTS.register(modBus);
         ENTITYTYPES.register(modBus);
         BLOCKENTITYTYPES.register(modBus);
         BIOMES.register(modBus);
         RECIPETYPES.register(modBus);
         PARTICLETYPES.register(modBus);
     }
}

I used the system to register one item:

package com.byabie.cubeic;

import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.event.BuildCreativeModeTabContentsEvent;

import net.minecraft.world.level.block.Block;

import net.minecraft.world.item.CreativeModeTabs;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.Rarity;

import com.byabie.mustardlib.util.*;
import com.byabie.cubeic.item.*;

public class CubeicRegistry {
     private static Registry re = new Registry(Cubeic.MODID);
     public static void register(IEventBus modBus) {
          re.register(modBus);
          modBus.register(CubeicRegistry.class);
     }
     public static void registerComponents() {
          re.initItem("amethyst_sword", new AmethystSwordItem());
     }
     @SubscribeEvent
     public void addToCreativeTabs(BuildCreativeModeTabContentsEvent event) {
          if(event.getTabKey() == CreativeModeTabs.COMBAT) {
               event.accept(() -> (Item)re.getItem("amethyst_sword").get());
          }
     }
}

This is my main mod class, where I register the item in commonsetup:

package com.byabie.cubeic;

import org.slf4j.Logger;

import com.mojang.logging.LogUtils;

import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.server.ServerStartingEvent;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.ModLoadingContext;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.config.ModConfig;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;

@Mod(Cubeic.MODID)
public class Cubeic {
    
    public static final String MODID = "cubeic";
    
    private static final Logger LOGGER = LogUtils.getLogger();
    
    public Cubeic() {
        IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus();
        modEventBus.addListener(this::commonSetup);
    }

    private void commonSetup(final FMLCommonSetupEvent event) {
        CubeicRegistry.registerComponents();
        ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, CubeicConfig.spec, "cubeic-common.toml");
        CubeicRegistry.register(FMLJavaModLoadingContext.get().getModEventBus());
        MinecraftForge.EVENT_BUS.register(this);
    }

    @SubscribeEvent
    public void onServerStarting(ServerStartingEvent event) {
        //
    }
}

This is my custom item class:

package com.byabie.cubeic.item;

import net.minecraft.world.item.crafting.Ingredient;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.Items;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Rarity;
import net.minecraft.world.item.SwordItem;
import net.minecraft.world.item.Tier;
import net.minecraft.world.item.TooltipFlag;

import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player;

import net.minecraft.network.chat.Component;
import net.minecraft.world.level.Level;
import net.minecraft.world.InteractionHand;

import java.util.List;

import org.jetbrains.annotations.Nullable;

public class AmethystSwordItem extends SwordItem {
     public static final int BASE_DAMAGE = 0;
     public AmethystSwordItem() {
          super(new Tier() {
               @Override
               public int getUses() {
                    return 250;
               }

               @Override
               public float getSpeed() {
                    return -6.0f;
               }

               @Override
               public float getAttackDamageBonus() {
                    return 0;
               }

               @Override
               public int getLevel() {
                    return 3;
               }

               @Override
               public int getEnchantmentValue() {
                    return 10;
               }

               @Override
               public Ingredient getRepairIngredient() {
                    return Ingredient.of(Items.AMETHYST_SHARD);
               }

          }, 7, -2.4F, new Item.Properties().rarity(Rarity.RARE).stacksTo(1));
     }
     @Override
     public boolean hurtEnemy(ItemStack stack, LivingEntity target, LivingEntity attacker) {
          if (attacker instanceof Player player) {
               int bonusDamage = player.experienceLevel / 3;
               float totalDamage = BASE_DAMAGE + bonusDamage;

               target.hurt(player.damageSources().playerAttack(player), totalDamage);

               stack.hurtAndBreak(1, player, (entity) -> entity.broadcastBreakEvent(InteractionHand.MAIN_HAND));
          }
          return true;
     }
     @Override
     public void appendHoverText(ItemStack stack, @Nullable Level world, List<Component> tooltip, TooltipFlag flag) {
          tooltip.add(Component.translatable("item.cubeic.amethyst_sword.desc"));
     }
}

It just crashed when I run the game, despite compiling.

Upvotes: 0

Views: 35

Answers (1)

Mr.UNIcode
Mr.UNIcode

Reputation: 142

I would say that if the crash is related to rendering, then review your mod rendering code and ensure that all rendering methods are correctly implemented and that there are no null references or incorrect method calls.

Upvotes: 1

Related Questions