My bad, here's the constructor. I already have SPELL_REGISTRY.register(bus), so I don't think that's the issue
package runecraft.core;
import com.mojang.brigadier.arguments.ArgumentType;
import com.mojang.logging.LogUtils;
import net.minecraft.client.gui.screens.MenuScreens;
import net.minecraft.commands.synchronization.ArgumentTypeInfo;
import net.minecraft.commands.synchronization.ArgumentTypeInfos;
import net.minecraft.commands.synchronization.SingletonArgumentInfo;
import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.inventory.MenuType;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import net.minecraftforge.registries.IForgeRegistry;
import net.minecraftforge.registries.RegistryBuilder;
import net.minecraftforge.registries.RegistryManager;
import net.minecraftforge.server.command.ModIdArgument;
import org.slf4j.Logger;
import net.minecraft.core.registries.Registries;
import net.minecraft.world.item.Item;
import net.minecraft.world.level.block.Block;
import net.minecraftforge.registries.DeferredRegister;
import runecraft.api.AllMenuTypes;
import runecraft.common.commands.SpellArgumentType;
import runecraft.events.CommandEventHandler;
import runecraft.events.ModClientEvents;
import runecraft.events.RuneToolEventHandler;
import runecraft.events.SpellEventHandler;
import runecraft.client.screen.RuneForgeScreen;
import runecraft.common.spell.Spell;
import runecraft.init.*;
import java.util.function.Supplier;
@Mod(value = Runecraft.MOD_ID)
public class Runecraft {
public static final String MOD_ID = "runecraft";
public static final DeferredRegister<Block> BLOCK_REGISTER = DeferredRegister.create(Registries.BLOCK, MOD_ID);
public static final DeferredRegister<Item> ITEM_REGISTER = DeferredRegister.create(Registries.ITEM, MOD_ID);
public static final DeferredRegister<MenuType<?>> MENU_REGISTER = DeferredRegister.create(Registries.MENU, MOD_ID);
public static final DeferredRegister<EntityType<?>> ENTITY_REGISTER = DeferredRegister.create(Registries.ENTITY_TYPE, MOD_ID);
public static final DeferredRegister<ArgumentTypeInfo<?, ?>> ARGUMENT_TYPE_REGISTER = DeferredRegister.create(Registries.COMMAND_ARGUMENT_TYPE, MOD_ID);
// RUNES REGISTRIES
public static final ResourceKey<Registry<Spell>> SPELL = createRegistryKey("spell");
private static <T> ResourceKey<Registry<T>> createRegistryKey(String p_259572_) {
return ResourceKey.createRegistryKey(new ResourceLocation(MOD_ID, p_259572_));
}
public static final DeferredRegister<Spell> SPELL_REGISTRY = DeferredRegister.create(SPELL, MOD_ID);
public static final RegistryBuilder builder = new RegistryBuilder<Spell>();
public static final Supplier<IForgeRegistry<Spell>> SPELL_REGISTRY_SUPPLIER = SPELL_REGISTRY.makeRegistry(()->builder);
public static final SpellRecipeRegistry SPELL_RECIPE_REGISTRY = new SpellRecipeRegistry();
public static final Logger LOGGER = LogUtils.getLogger();
public static Runecraft instance;
public Runecraft() {
instance = this;
IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus();
MinecraftForge.EVENT_BUS.register(new SpellEventHandler());
MinecraftForge.EVENT_BUS.register(new RuneToolEventHandler());
bus.addListener(this::commonSetup);
bus.addListener(this::clientSetup);
BLOCK_REGISTER.register(bus);
ITEM_REGISTER.register(bus);
MENU_REGISTER.register(bus);
SPELL_REGISTRY.register(bus);
ENTITY_REGISTER.register(bus);
ARGUMENT_TYPE_REGISTER.register(bus);
//TODO Move to AllArgumentTypes Class
ARGUMENT_TYPE_REGISTER.register("spell",
()-> ArgumentTypeInfos.registerByClass(SpellArgumentType.class,
SingletonArgumentInfo.contextFree(SpellArgumentType::spellArg)));
ModBlocks.setup();
ModItems.setup();
ModMenus.setup();
ModSpells.setup();
ModEntityTypes.setup();
}
private void commonSetup(final FMLCommonSetupEvent event) {
event.enqueueWork(ModPacketHandler::setup);
}
private void clientSetup(FMLClientSetupEvent event) {
event.enqueueWork(
// Assume RegistryObject<MenuType<MyMenu>> MY_MENU
// Assume MyContainerScreen<MyMenu> which takes in three parameters
() -> MenuScreens.register(AllMenuTypes.RUNE_FORGE.get(), RuneForgeScreen::new)
);
}
}