promotional bannermobile promotional banner

CoolCatLib

Write it once, run it everywhere. Events, networking, registries and configs, with screen effects, custom skies, cutscenes and GUI widgets on top: the purr-fect foundation for your mods.
Back to Files

[NeoForge] 26.3 | V8.0.0 RELEASE

File namecoolcatlib-neoforge-8.0.0+26.3.jar
Uploader
ixDarkLorDixDarkLorD
Uploaded
Oct 26, 2026
Downloads
15
Size
2.0 MB
Mod Loaders
NeoForge
File ID
9333474
Type
R
Release
Supported game versions
  • 26.3

Curse Maven Snippet

NeoForge

implementation "curse.maven:coolcatlib-916525:9333474"

Learn more about Curse Maven

What's new

v8.0.0 Release | Oct 26, 2026

✨ New Features

  • More common events (api.event.v2.common), fired the same on every loader:
    • BlockEvents.PLACE: a block is about to be placed, by any block item (players, dispensers, other mods' machines) or an enderman; interrupt and it isn't, and the item isn't used up.
    • PlayerEvents.PICKUP_ITEM (interrupt to leave the item on the ground), TRAVEL_TO_DIMENSION (before any teleport to another dimension: portals, commands, other mods' teleporters; interrupt to stay), CRAFTED and SMELTED (an item taken from a crafting or furnace result slot).
    • LivingEvents.EQUIPMENT_CHANGE: what an entity wears or holds in a slot changed.
    • RecipeEvents.CRAFT_RESULT: a crafting recipe's result for a crafting grid or a crafter; interrupt with another stack, or an empty one so nothing can be crafted.
  • Game tests from common code (api.gametest), the same on Fabric and NeoForge: GameTests.register(modId, SomeTests.class) registers every @GameTest method (as <modid>:<class>/<method>), and GameTests.register(id, options, helper -> ...) one test by hand. GameTestOptions sets the structure, time limit, setup ticks, rotation, retries, sky access, padding and environment; without a structure of their own, tests run on CoolCatLib's coolcatlib:gametest/platform, an empty 8 × 6 × 8 space on a stone floor. Tests are added in a development environment or with -Dcoolcatlib.gametest=true (or the loader's own game test switch), then run with /test run <modid>:* or on a game test server.
  • Attachments on levels and on the server: get, set, update, modify, has and reset take a Level or the MinecraftServer, saved in its data folder and synced (SyncPolicy.ALL) to the players in the level, or to everyone. getGlobal(level) reads the server's values on either side.
  • Offline players' attachments: getOffline, setOffline, updateOffline and resetOffline read and write a player's saved values whether or not they're online (an offline player's data file is written at once).
  • Sound filters (api.client.sound): muffle, roughen and echo the game's sounds, as heard through a wall, under a spell or in a cave.
    • A SoundFilter is how loud a sound stays, how much of its high end it keeps, and how much of it goes through a distortion and into a reverb. muffled, quieter, distorted and echoing make the usual ones; then combines two and lerp goes part of the way, for fades.
    • SoundFilters.register(provider) adds a SoundFilterProvider, asked about each sound as it starts and as it moves, with a SoundContext: where it plays, which sound event it is, its category and whether it is relative to the listener (music, the menus). SoundFilterProvider.inWorld makes one for the sounds in the world only, by their place. register gives back a Registration to remove() it again.
    • Named filters for every sound at once (but the menus' clicks): SoundFilters.set(id, filter, fadeTicks) fades one in, clear(id, fadeTicks) out again; isSet(id). From the server, SoundFilterControl.set and clear (api.sound) do the same for a player.
    • SoundFilters.refresh() filters the sounds already playing again, when a provider's answers change.
    • Through OpenAL's EFX extension (a low-pass filter on each sound, sent to a distortion and a reverb effect); without it, sounds are left as they are.
  • Items drawn in a GUI at an opacity (api.client.gui.ItemOpacityRenderer), flat and solid ones alike, where the game draws them only fully opaque: render and renderWithDecorations (with the count and durability bar) at an opacity or an OpacityTween (in, out, between, eased over ticks and smooth at any frame rate), and withOpacity(opacity, draw) for anything that draws items, fading the text and bars drawn with them too. pushItemOpacity and popItemOpacity fade just the items drawn between them.
  • Placing GUI elements out of the way of everything else (api.client.gui.placement): GuiAreas.hud() and screen() give the boxes of what the HUD (every mod's HUD layers too: minimaps, block tooltips, boss bars) and the open screen drew last frame, the screen's widgets included but not its background or the tooltip under the mouse; GuiAreas.unrecorded(draw) draws your own element without it counting. GuiPlacement.hud() / screen() take a size, where you'd like it (at), a gap, the bounds to stay within and the directions it may slide in, leave out overlays and whatever you ignore, and find() the nearest clear place.
  • World effect layers: frame.draw(material, VfxLayer.of(n)) draws in a layer, lowest first, so a higher layer always covers a lower one. A VfxLayer.sorted(n) layer draws its painted-over shapes of every material back to front, so shapes of different textures cover each other as their distance says. Materials in a layer now draw in the order they were first used each frame, where before they drew in no set order.

🐛 Bug Fixes

  • Mod Menu and NeoForge's mod list have a config button for CoolCatLib again, and for every mod with a CoolCatLib config. It opens CoolCatLib's own config screens, or Glazed Menu's when it's installed (Glazed Menu then gives the other mods' buttons itself).

🔧 Changes

  • CoolCatLib's own config screens (used when Glazed Menu isn't installed) are the full ones again, the same as on 1.21.1 and 1.20.1: a card for each of a mod's configs (or every mod's), each config's screen with its categories, search, presets, undo and redo, list and color editors, and category popups. Configs go by their own names ("Client", "Server"), after their mod's where it matters ("Testing Mod › Client"), instead of "Testingmod Client"; translate one with config.<modid>.<name>.label.
  • Mod Menu no longer marks CoolCatLib as a library, so its list doesn't hide it by default.
  • New version numbers: <version>+<minecraft>, this one 8.0.0+26.3, the same for every Minecraft version and loader. They follow on from 26.3-7; the part before the + is what launchers and loaders compare, the Minecraft version after it is only a label. Depending on CoolCatLib: ask for >=8.0.0, and the Maven artifacts are coolcatlib-<loader>:8.0.0+26.3.

This mod has no additional files