[Fabric] 1.20.1 | V2001.1.0.0 RELEASE
Curse Maven Snippet
What's new
v2001.1.0.0 Release | Sep 30, 2026 (Minecraft 1.20.1)
✨ New Features
- First release: the render and visuals half of what used to be CoolCatLib, split out and built on CoolCatLib: Core. Everything below was moved from CoolCatLib into the
net.ixdarklord.coolcatcanvaspackage andcoolcatcanvasnamespace. - Screen effects (
api.client.effect): full-screen post-processing shaders whose uniforms can change every frame (vanilla's post chains bake them in at load).ScreenEffects.register(id, definition)from a vanilla-formatpost_effectJSON (vanilla's own included) or aScreenEffectDefinitionbuilt in code; any number stack, ordered bypriority, drawn over the world (WORLD) or over everything including the HUD and menus (SCREEN).- Smooth fades (
fade,Easing), timed pulses (enableFor), animated strength, conditions (activeWhen), strength functions of the frame (strength) and per-frame callbacks (onFrame). - Uniforms by name: set, animated (
animateTo) or bound to a function of the frame;autoBlendfades shaders that ignore the effect's strength. - Shaders get
Strength,Time,AgeandSeedplus noise and luminance helpers from#moj_import <coolcatcanvas:screen_effect.glsl>; persistent targets allow feedback effects; reloaded with resource packs; a failing effect is logged and skipped. - No effects of its own: mods bring their own post effect JSON and shaders, or use vanilla's (
minecraft:invert, ...). api.effect.ScreenEffectControldrives a player's effects from the server.- Layers (
ScreenEffects.layers()): the draw order of every effect, from priorities until rearranged (move up/down, to a layer, to the top or bottom, reset). - An effects screen (
ScreenEffects.openScreen(), a key unbound by default,/coolcatcanvas_client effects): every selectable effect with a switch, the active ones as drag-and-drop layers grouped by stage with a strength slider each, a live unblurred preview and a Preview mode hiding the panels. Players' choices (on/off, strengths, order) are saved toconfig/coolcatcanvas-screen-effects.json. Effects have adisplayName,descriptionandselectableflag for it. - Events (
ScreenEffectEvents):BEFORE_TOGGLE(cancellable) andTOGGLEDwith the cause (code, condition, timeout, player, server),STRENGTH_CHANGED,UNIFORM_CHANGED,LAYERS_CHANGEDandLOADED.
- Custom skyboxes (
api.client.sky): layers drawn inside vanilla's sky pass, around the sun, moon and stars.Skyboxes.register(id, definition)from aSkyboxDefinitionbuilt in code orassets/<namespace>/skybox/<path>.json; resource packs add skyboxes with no code by listingdimensions(dimensions without a sky, like the Nether, get one while it shows).- Layer types:
cubemap(six faces in a 3x2 image),panorama(equirectangular),sprite(an image placed in the sky, e.g. a planet),gradient, andshader(your own fragment shader, with#moj_import <coolcatcanvas:sky.glsl>); any type can swap in its own fragment shader. - Per layer: blend mode (alpha, additive, multiply, screen), tint, orientation, rotation over real time, game time, the day or vanilla's sun/moon/star angle, flipbook animation with optional interpolation, day-time fade windows, rain fade, horizon/underwater fog, and 4 shader params.
- Hides vanilla's sky color, sunrise, sun, moon, stars, void, End sky and End flashes, fading them out as the skybox fades in.
- Runtime control: fades,
enableFor, conditions (activeWhen), per-frame callbacks, and per layer (Skybox.layer(name)) visibility, animated opacity and tint, and params set, animated or bound to a function of the frame.api.sky.SkyboxControldrives them from the server: enable, disable,toggle,setEnabled, timed pulses and layer changes, for one player or several (to(players),inLevel(level),everyone(server)). - Cheap: nothing runs while no skybox shows; a visible layer is one draw from a shared static mesh, all layers of a stage share one render pass and one uniform upload.
api.utils.Easing: easing curves.- GUI components and widgets (
api.client.gui.components: panels, scroll and drag widgets, slide animations,ColorableImageButton), andapi.client.utilsRenderUtils,NineSliceInfoandScreenAnchor.ViewportPanel(pan and zoom) edge fades show where content continues past an edge, and shrink smoothly into their side as the end of the content on that side comes into view.
- Animated color gradients (
api.utils.ColorGradient): color stops looping around (ColorGradient.of(colors...)) or the full rainbow (RAINBOW,rainbow(saturation, brightness)), scrolling over time (withSpeed) and along the text or outline (withSpread), with each letter colored (perLetter(n)) or the whole text in one cycling color (wholeText(),RAINBOW_WHOLE). Presets:RAINBOW,RAINBOW_WHOLE,PASTEL_RAINBOW,FIRE,OCEAN,AURORA. - Gradient components:
gradient.literal("..."),gradient.apply(component)or a style withgradient.textColor()make a component animate wherever it's drawn (chat, tooltips, item names, signs, widget labels). In JSON text and commands (/tellraw) the color is"coolcatcanvas:rainbow","coolcatcanvas:rainbow_whole","coolcatcanvas:rainbow/<speed>/<spread>/<saturation>/<brightness>"or"coolcatcanvas:gradient/<speed>/<spread>/#RRGGBB/#RRGGBB..."; players without Canvas can't read it. - Gradient and outlined text (
api.client.utils.TextEffects):gradient(text, gradient)andrainbow(text)recolor existing text and stay animated when kept; outlined text in a solid color or a gradient. - Outlines (
api.client.utils.Outline): solid or a gradient (Outline.gradient,Outline.rainbow()), with a thickness and padding, drawn around any rectangle;ElementOutlines.set(widget, outline[, when])attaches one to any widget (vanilla's too), optionally only while a condition holds (hovered, focused...).
🔁 Differences from the 26.1.2 version (Minecraft 1.20.1)
- Built for Forge 47 and Fabric on Java 17. Screen effects and skyboxes run on 1.20.1's OpenGL rendering with Canvas's own shader programs (GLSL 150, no uniform blocks,
#moj_importsupported), hooked intoGameRenderer.renderandLevelRenderer.renderSkyon both loaders. - Screen effects use 1.20.1's post chain format: definitions are
assets/<ns>/shaders/post/<path>.json(vanilla's own included, e.g.minecraft:invert) with programs inshaders/program/.ScreenEffectDefinitionis(targets, passes); aPasshasprogram,input,output,auxTargets,uniformsandbilinear(JSONname,intarget,outtarget,auxtargets,uniforms,bilinear); uniform types come from the program JSON (UniformSpec(name, values)); the main input sampler isDiffuseSampler.simple(program, uniforms...),PassBuilder.input(sampler, target)takes the full sampler name, andPassBuilder.bilinear/uniformare new; every target persists between frames.BLIT_PROGRAMandBUILTIN_UNIFORMSreplace the 26.1.2 shader-stage constants. - Skyboxes:
SkyBlendexposessourceColor()/destColor()/sourceAlpha()/destAlpha()/apply(). 1.20.1 has no End flashes (VanillaSky.END_FLASHdoes nothing) and its moon and stars follow the sun, so the moon and star clocks do too. In dimensions with a sky renderer of their own (ForgeDimensionSpecialEffects.renderSky, Fabric APIDimensionRenderingRegistry), the layers are drawn over that sky, in the sky's fog; what a skybox hides only applies to vanilla's sky, so nothing of that sky is hidden. With an Iris/Oculus shader pack active, skyboxes step aside. - GUI widgets: render methods named
extract...on 26.1.2 arerender...(Panel.renderContents,ScrollPanel.renderScrolled/renderFrame,ViewportPanel.renderWorld/renderViewBackground/renderViewForeground); input uses 1.20.1's signatures (ViewportPanel.worldClicked(x, y, int button)); widgets take Canvas's ownWidgetSprites(texture paths, stretched or nine-sliced);AbstractScrollableWidgetscrolls sideways with Shift + wheel.RenderUtilsaddscontainsPoint,nextStratum,withTintandblitSprite.
All Relations
- All Relations
- Embedded Library
- Optional Dependency
- Required Dependency
- Tool
- Incompatible
- Include

