
Modrinth · Minecraft mod
Seam
Shared classes and resources for Perspective and Luminance.
Quick answer
Which Seam release should I use?
Seam 1.0-beta.1+1.21.11 targets 1.21.11 with Fabric. Installation on the client is optional. Installation on the dedicated server is optional. All 1 required mods have matching files.
Where it goes
Is Seam required on the client, server, or both?
Installation on the client is optional. Installation on the dedicated server is optional.
The source marks this as usable on both the client and server.
What else does Seam 1.0-beta.1+1.21.11 need?
1.0-beta.1+1.21.11. Change the file and its required mods may change too.
Install Fabric API first. We found matching files for this game-version and loader setup.
We only count dependency files that match this setup. A file for another loader does not fill the gap.
Before you install it
Add Seam without breaking your instance.
Built for Seam 1.0-beta.1+1.21.11. Pick another file and the loader, install side or required mods may change.
- 01
Stick to this file
Use 1.0-beta.1+1.21.11. It targets 1.21.11 with Fabric; another release may have different loader, side or dependency requirements.
- 02
Bring the mods it needs
Install Fabric API first. We found matching files for this game-version and loader setup.
- 03
Put it on the correct side
Installation on the client is optional. Installation on the dedicated server is optional.
- 04
Pick the file you checked
Use the “Get this file” button beside 1.0-beta.1+1.21.11. It opens that exact file at the source.
About this project
What does Seam add?
Seam
Shared classes and resources for Perspective and Luminance.
Seam is currently under development
Some features may change throughout the development process.
Please report bugs, and suggest feature requests on our Issues page.Alternatively, you can let us know on the
#bug reportschannel on my Fluxer or Discord server, and we'll make an issue for you.
You can also use the#modding chatchannel if you need any help!
If you are a player, you shouldn't need to install this, unless a mod has asked you to. Most mods that use Seam should have it bundled; You can still install Seam alongside, and Fabric will use the most up-to-date one.
The following information is for mod developers, to help them understand how to use Seam.
Events
Seam contains several event registries, to help develop things easier.
These have been primarily designed around Luminance and Perspective, however other mods are welcome to use them!
This description isn't extensive, I recommend looking at our source code!
Client Events
The following client event registries are located in the dev.dannytaylor.perspective.seam.client.events.SeamClientEvents class:
CustomBadges- It is recommended to use the
SeamClientEvents.registerCustomBadge(Identifier badgeId, int outlineColor, int fillColor, int textColor);function to register custom badges, see example in theModMenu Badgessection below.
- It is recommended to use the
ModBadges- It is recommended to use the
SeamClientEvents.registerModBadge(String modId, Identifier customBadgeId);function to register mod badges, see example in theModMenu Badgessection below.
- It is recommended to use the
IconOverrides- It is recommended to use the
SeamClientEvents.registerIconOverride(String modId, IconOverride iconOverride);function to register icon overrides.
- It is recommended to use the
ProfiledDebugEntries- It is recommended to use the
SeamClientEvents.registerProfiledDebugEntry(Identifier identifier, DebugScreenEntry debugScreenEntry, DebugScreenProfile profile, DebugScreenEntryStatus status);function to register profiled debug entries.
- It is recommended to use the
ClientResourceReloaders- Map of
net.minecraft.resources.Identifier,net.minecraft.server.packs.resources.PreparableReloadListener, which gets registered on client initialize, and executes on client resource reload.
- Map of
AfterClientResourceReload- Map of
net.minecraft.resources.Identifier,java.lang.Runnable, which executes after client resources have reloaded.
- Map of
BeforeGuiRender- Map of
net.minecraft.resources.Identifier,dev.dannytaylor.perspective.seam.client.events.SeamClientRunnables.GuiRender, which renders before the gui.
- Map of
AfterGuiRender- Map of
net.minecraft.resources.Identifier,dev.dannytaylor.perspective.seam.client.events.SeamClientRunnables.GuiRender, which renders after the gui.
- Map of
BeforeGameRender- Map of
net.minecraft.resources.Identifier,java.lang.Runnable, which executes before the game is rendered.
- Map of
AfterPanoramaRender- Map of
net.minecraft.resources.Identifier,dev.dannytaylor.perspective.seam.client.events.SeamClientRunnables.PanoramaRender, which renders after the menu panorama.
- Map of
AfterVanillaPostEffectRender- Map of
net.minecraft.resources.Identifier,dev.dannytaylor.perspective.seam.client.events.SeamClientRunnables.GameRender, which renders after the vanilla post-effect shader.
- Map of
BeforeUiRender- Map of
net.minecraft.resources.Identifier,dev.dannytaylor.perspective.seam.client.events.SeamClientRunnables.GameRender, which renders before the current screen.
- Map of
AfterUiBackgroundRender- Map of
net.minecraft.resources.Identifier,dev.dannytaylor.perspective.seam.client.events.SeamClientRunnables.GameRender, which renders after the current screen's background.
- Map of
AfterUiRender- Map of
net.minecraft.resources.Identifier,dev.dannytaylor.perspective.seam.client.events.SeamClientRunnables.GameRender, which renders after everything.
- Map of
OnResized- Map of
net.minecraft.resources.Identifier,dev.dannytaylor.perspective.seam.client.events.SeamClientRunnables.OnResized, which executes when the window is resized.
- Map of
OnMouseScroll- Map of
net.minecraft.resources.Identifier,dev.dannytaylor.perspective.seam.client.events.SeamClientCallables.OnMouseScroll, which executes when the mouse is scrolled.
- Map of
OnMouseButton- Map of
net.minecraft.resources.Identifier,dev.dannytaylor.perspective.seam.client.events.SeamClientCallables.OnMouseButton, which executes when the mouse handles a button.
- Map of
OnJoinWorld- Map of
net.minecraft.resources.Identifier,java.lang.Runnable, which executes when the client joins a world.
- Map of
OnLeaveWorld- Map of
net.minecraft.resources.Identifier,java.lang.Runnable, which executes when the client leaves a world.
- Map of
OnStartItemUse- Map of
net.minecraft.resources.Identifier,dev.dannytaylor.perspective.seam.client.events.SeamClientRunnables.UseItem, which executes when the item is used (client-side only).
- Map of
OnFinishItemUse- Map of
net.minecraft.resources.Identifier,dev.dannytaylor.perspective.seam.client.events.SeamClientRunnables.FinishUsingItem, which executes when the item is finished being used (client-side only).
- Map of
Message Bar
Seam adds a message bar to the top-center of the screen.
See Common Events for how to send messages from the server.
You can update the Message Bar (on the client-side) by using the following function:dev.dannytaylor.perspective.seam.client.events.SeamClientEvents.sendToMessageBar(Component.literal("this is an example message!"));
Icon Overrides
You can register a custom icon override with Seam.
This will automatically update your mod's icon with Mod Menu. If you are using this with another mod (such as Sodium), you will have to implement this manually.
Here is an example of how to register an icon override that only changes on April 1st.
import net.fabricmc.api.ClientModInitializer;
import net.minecraft.resources.Identifier;
import dev.dannytaylor.perspective.seam.client.events.SeamClientEvents;
import dev.dannytaylor.perspective.seam.common.util.DateHelper;
import dev.dannytaylor.perspective.seam.client.events.IconOverride;
public class MyClientInitializer implements ClientModInitializer {
@Override
public void onInitializeClient() {
SeamClientEvents.registerIconOverride("modId", new IconOverride(Identifier.parse("modid:textures/icon2.png"), DateHelper::isAprilFools));
}
}
ModMenu Badges
You can register custom mod menu badges with Seam.
Registering custom badges doesn't require mod menu to be installed.
Here is an example of how to register a custom mod menu badge.
import net.fabricmc.api.ClientModInitializer;
import net.minecraft.resources.Identifier;
import dev.dannytaylor.perspective.seam.client.events.SeamClientEvents;
public class MyClientInitializer implements ClientModInitializer {
public static final Identifier EXAMPLE_BADGE = SeamClientEvents.registerCustomBadge(
Identifier.parse("modid:example_badge"), // badge identifier
0xFFAAAAAA, // outline colour
0xFF808080, // fill colour
0xFFFFFFFF // text colour
);
@Override
public void onInitializeClient() {
SeamClientEvents.registerModBadge("modId", EXAMPLE_BADGE);
}
}
You'll also need to add the following key to your language file (/assets/<namespace>/lang/en_us.json).
{
"gui.modid.custom_badge.example_badge": "Example"
}
The language key format is: gui.<namespace>.custom_badge.<path>.
Included Badges
Seam contains two built-in badges.
Perspective
Used by Perspective's mods, indicating they are part of Perspective.
Luminance
Should be used by mods that use Luminance, indicating support for luminance shaders.
Here is an example of how to add the luminance badge to your mod.
import net.fabricmc.api.ClientModInitializer;
import dev.dannytaylor.perspective.seam.client.events.Badges;
public class MyClientInitializer implements ClientModInitializer {
@Override
public void onInitializeClient() {
Badges.luminance("modId");
}
}
Common Events
Seam doesn't currently contain any common or server-only registries.
It does however contain some common functions, and classes.
dev.dannytaylor.perspective.seam.common.data.FabricMod, stores the mod id, name, and creates a logger.
You can also send messages to your logger via dev.dannytaylor.perspective.seam.common.data.log.SeamLog by specifying your FabricMod in the function arguments (info, warn, error, and debug all take the following arguments: (AbstractMod mod, String message, Object... args)).
dev.dannytaylor.perspective.seam.common.events.SeamEvents contains tryRun and onInitialize functions. These functions catch and log errors when running the specified runnable. The onInitialize functions also log what they are initializing.
Message Bar
If you're making a client mod, see the Client Events section above. These should be used for server-side mods.
You can send a message to a client's message bar by using dev.dannytaylor.perspective.seam.common.events.SeamEvents.sendToMessageBar(ServerPlayer player, Component message);.
You can also send a message with a custom tick length by using dev.dannytaylor.perspective.seam.common.events.SeamEvents.sendToMessageBar(ServerPlayer player, Component message, float ticks);.
Licenced under LGPL-3.0
Project description from Modrinth.
Pick your setup
Seam by Minecraft version and loader
Choose the version and loader you play, then open the matching release.
1.21.11
1 loader buildCheck the dependencies, then try the file in a copied instance before changing a world you care about.
Recent files
Seam versions and loaders
1.0-beta.1+1.21.11
seam-1.0-beta.1.jar
22 Jul 2026
1.0-alpha.2+1.21.11
seam-1.0-alpha.2.jar
14 May 2026
1.0-alpha.1+1.21.11
seam-1.0-alpha.1.jar
14 May 2026
Looking for an older file? The official Modrinth project page is in Resources.