Registered block has no particles or break sound?

When I register a block, it has no particles, break sound, or anything that happens when a block normally breaks.

Here’s how I register it.

public class TestMod implements ModInitializer {
	static TestSculkInteractableBlock TEST_BLOCK;
	static final ItemGroup TEST_GROUP;
	static BlockItem TEST_BLOCK_ITEM;
	
	@Override
	public void onInitialize(ModContainer mod) {
		TEST_BLOCK = Registry.register(Registry.BLOCK, new Identifier("sculk-api-testmod", "test_block"), new TestSculkInteractableBlock(QuiltBlockSettings.copyOf(Blocks.SCULK)));
		TEST_BLOCK_ITEM = Registry.register(Registry.ITEM, new Identifier("sculk-api-testmod", "test_block"), new BlockItem(TEST_BLOCK, new QuiltItemSettings()));
	}
	
	static {
		TEST_GROUP = QuiltItemGroup.builder(new Identifier("sculk-api-testmod", "test_group"))
				.icon(() -> TEST_BLOCK_ITEM.getDefaultStack())
				.appendItems(stacks -> stacks.add(TEST_BLOCK_ITEM.getDefaultStack()))
				.build();
	}
}

I have confirmed that it is not the fault of TestSculkInteractableBlock, as registering it as a Block has the same effect.
What is happening?
For context, I’m using block.extensions, item.setting, item.group, and core.qsl.base modules of QSL.

Not sure what’s going on, but exiting and saving the world will cause the block to save as -1 for some reason.

Did some debugging. Somehow the raw ID is -1?

The issue was that I did not have core.registry. When including QSL modules, always include core.registry if you’re going to use anything with registries.

build.gradle (Groovy)

dependencies {
	// ...
	modImplementation libs.core.registry
	// ...
}

build.gradle.kts (Kotlin)

dependencies {
	// ...
	modImplementation(libs.core.registry)
	// ...
}