
Fluidlogged API
A library mod that adds highly customizable fluidlogging to 1.12.2!
192.4K
49
Bug Fixes:
- Fix occasional visual flickering while moving underwater (fixes #299).
- Make it harder for the player to clip their camera into water without applying the correct fog or overlay.
Bug Fixes:
- Fix crash during mod load if Dynamic Surroundings is not installed (fixes #297) (this bug only affected v3.3.0 of Fluidlogged API).
Features:
- Improve water particle water collision detection:
- Accounts for fluid height.
- Allows water particles to survive in any blocks that can create them (entities swimming in blocks that return true for
isAABBInsideMaterial, but aren't a fluid, for example).
- New config setting that allows FluidState redstone behavior to be disabled.
Bug Fixes:
- Block material entity acceleration now only caches chunks as-needed (probably fixes #290).
- Fix a couple very rare crashes related to fluid entity collision.
- Fix a crash that would happen if a mod attempted to render a fluid block without a world loaded.
- Fix a possible crash related to
MutableBlockPosmulti-threading (probably fixes the 1st half of #289). - Fix fluid collision not working at all for very small fluid heights.
- Much better fix for MC-2591 (it actually works now).
- Rewrite the FluidState redstone logic implementation. This fixes many (maybe all?) modded redstone-related conflicts!
Compatibility Fixes:
- Cleanroom Mod Loader:
- Fix a strange crash with Cleanroom on mobile (fixes #292).
- Should no longer require the Fugue mod for Fluidlogged API to run.
- Dynamic Surroundings:
- Account for FluidStates when checking fluid color for the position.
- Add FluidState support for Dynamic Surroundings' underwater breathing effect.
- Fluid drop particles no longer phase through FluidStates.
- Now plays all ambient/random block effects for FluidStates!
- Rain drop particles no longer phase through FluidStates.
- Rain drop particles now create water ripples on FluidStates.
- Steam jet effect now accounts for FluidStates when counting the amount of surrounding "hot" blocks.
- Water splash jet effect is now FluidState-sensitive.
- Galacticraft:
- Fix a crash when fire checks whether certain Galacticraft fluids are flammable (fixes #291).
- Make Galacticraft's fluid drip particle account for FluidStates during its collision check.
- Immersive Engineering:
- Wires (and other IE-like wires from other addons like Industrial Wires) now correctly trigger electrocuted damage + knockback with this mod installed (fixes #286).
- NuclearCraft:
- Make all NuclearCraft source gas fluid blocks only vaporize their FluidState while fluidlogged instead of the whole block (fixes 2nd half of #289).
- OreLib:
- Allow OreLib's
IBlockAccessExclass to read FluidStates. This fix was originally part of my Subaquatic mod, but I'm moving it so it can be updated here as necessary.
- Allow OreLib's
- Tropicraft:
- Allow Tropicraft's fish hook entity to account for FluidStates when deciding which blocks to play splash effects for.
API Changes:
- Blocks without a material of lava are automatically marked as entity flammable if they return true for
Block.isAABBInsideMaterial(world, pos, aabb, Material.LAVA). - Buckets now correctly pass the player into
FluidUtil.tryPlaceFluid. This fixes a very minor unintentional code behavioral difference between forge and this mod. - Fix a bad return value in
PluginWorld.Hooks.setBlockToAir(client now returns true if a fluid is at the position instead of false). This makes the client & server return the same value. - New
api.world.ICubeDatainterface:- Represents a 16x16x16 section of block data, without a reliance on using Chunks.
- New
FluidloggedUtilsmethods that acceptICubeDatainstead of a chunk. The old chunk-based methods still exist for backwards compatibility.
- New
api.world.ICubeDataProviderinterface:- Allows custom
IBlockAccessimplementations to supplyICubeData.
- Allows custom
- New
api.world.IFluidEventListenerinterface:- Allows code to be executed when a FluidState changes somewhere in the world.
- This is intended to be used the same way as
IWorldEventListener.notifyBlockUpdate. IFluidloggable.onFluidChange,Block.onBlockAdded, andBlock.neighborChangedshould still be enough for most cases.
- Improve water particle water collision detection:
Features:
- Add Modrinth
updateJSONurl. - Minor performance improvements.
Bug Fixes:
- Fix concurrency issue with
FluidFlowHandler::getFlowVec(fixes #275 and #283). - Fix crash with Java 9+ (fixes #284) (this bug only affected v3.1.3 of Fluidlogged API).
- Fix minor inconsistency with normal fluid flow logic.
Compatibility Fixes:
- Gauges and Switches:
- Fix blocks not emitting a redstone signal (fixes #282).
- Schematica:
- Fix crash when rendering schematica with fluids (fixes #279).
API Changes:
- New method:
...api.util.IFluidloggable.canFluidConnect(IBlockAccess, BlockPos, IBlockState, EnumFacing). - New method:
...api.util.FluidloggedUtils.canFluidConnect(IBlockAccess, BlockPos, IBlockState, EnumFacing). - Restore
FluidloggedUtilsmethods that were accidentally removed in v3.0.0.
- Add Modrinth
Bug Fixes:
- Fix bugs if certain transformers are run twice, by resetting asm plugin search index ints before running them.
- Fixes FutureMC scaffolding asm conflict (fixes #273).
- Fixes possible weird fluid rendering when "fancy fluid rendering" is disabled.
- Fix concurrency issue with
FluidState::withLevel(fixes #274). - Fix "fluidlogged_api is missing the required element 'version' and a version.properties file could not be found" console error.
Compatibility Fixes:
- Fix bugs if certain transformers are run twice, by resetting asm plugin search index ints before running them.
Bug Fixes:
Compatibility Fixes:
- Astral Sorcery:
- Crystal cluster creation now accounts for FluidStates (only if the block there is replaceable).
- Fix crystal tool item entity crash (#266).
- Liquid Starlight now uses this mod's fluid collision system, fixing some bugs.
- Astral Sorcery:
Features:
- Fluidlogged API's config gui is now translucent while in a world. This will probably be added to all of my other mods as well!
Bug Fixes:
- Fix a possible crash (#243 (comment) & #257).
- Fix a possible
FluidState.withLevelcrash (#252). - Fix fluid collision for "pseudo-fluid" blocks (#258).
- Redownload community configs if the internal versions.jsonc file got corrupted. This fixes a possible crash.
- Server-side fluidlogging configs are now always sent to connected players.
- While "nonSourceFluidlogging" was disabled, source fluid blocks could be created with non-source fluid blocks, by flowing into a fluidloggable block with other non-source fluids on two different sides. Now adjacent source blocks are required for this behavior once again, like in v2.x.x (#249).
Compatibility Fixes:
- Chisels and Bits:
- Allow chiseled bits to be placed inside replaceable blocks.
- Fix chiseled blocks voiding fluids on placement.
- Fix fluid collision for chiseled blocks (#248).
- Galacticraft:
- Fix crash with old Galacticraft (non-legacy) versions (#255).
- Industrial Foregoing:
- Fluidlogged pink slime fluid no longer removes the block when spawning a pink slime entity (it only removes the fluid now).
- The fluid pump now (actually) accounts for FluidStates.
- The resource fisher now accounts for FluidStates.
- The water collector now accounts for FluidStates.
- Optifine:
- PneumaticCraft:
- Allow Empty PCBs to be filled using FluidStates.
- Random Things:
- Fix wireless redstone (#253).
- Ruins:
- Forcibly prevent Ruins structures from being able to contain old FluidStates (#254).
- Thermal Expansion:
- The Aquatic Entangler now accounts for FluidStates.
- The Aqueous Accumulator now accounts for FluidStates.
API Changes:
...mod.common.message.SMessageSyncRuntimeConfigshas been renamed to...mod.common.message.SMessageSyncConfigs. This is an internal class, so it shouldn't affect any mods.- New interface:
...api.message.IServerMessageHandler. Functions as a server-side counterpart toIClientMessageHandler. - New method:
...api.message.IClientMessageHandler.isCtxValid(REQ, MessageContext). - New method:
...api.message.MessageUtils.readJson(ByteBuf). Utility method that reads a JsonElement with UTF8 byte encoding from the buffer. - New method:
...api.message.MessageUtils.writeJson(ByteBuf, JsonElement). Utility method that writes a JsonElement with UTF8 byte encoding to the buffer. - New method:
...api.util.FluidloggedUtils.positionDripParticle(World, BlockPos, FluidState). Utility method that returns the position to spawn a drip particle, or empty if one cannot be spawned. - Split
ToFluidloggedDataFixerfunctionality from the legacy data fixer. This change allows for separate versioning between them, and allows other mods besides Fluidlogged API to increment theToFluidloggedDataFixerversion (other mods increment it automatically when adding a newIFluidloggedDataMapper).
Bug Fixes:
- Allow null values for
TransformerMethodRedirects::getExplosionResistance(fixes #245). - Restore the
BlockLiquid::requiresUpdatespatch from pre-v3.0.0 (fixes #244). - Fix #243 (comment)
- Allow null values for
Bug Fixes:
- Fix all render crashes caused by mods not passing
IExtendedBlockStateinto fluid models (fixes #242). - Fix
PluginWorld.getStrongPower()crash (fixes #239, #240, and #243).
Compatibility Bug Fixes:
- Better Foliage:
- FluidStates now don't use Better Foliage's cutout render layer (fixes #236).
- Dynamic Trees:
BlockRootyWateris now fluidloggable, and all of its built-in "pseudo-fluidlogging" logic has been removed. This fixes #241, along with many other miscellaneous bugs and compatibility issues with the block in general.BlockRootyWaterno longer creates water in the nether.BlockRootyWaternow produces block breaking particles.
- Fix all render crashes caused by mods not passing
Bug Fixes:
- Fix crash with Super Factory Manager mod (issue#233)
- Redirecting a stair block will now cause the stair to update neighboring fluids once again.
Bug Fixes:
- Fix crash with Fugue + Optifine (issue#232)
Bug Fixes:
- Cleanroom support (without Fugue).
- Fix Chiseled Me mod compatibility.
Bug Fixes:
- Fix issue#230
Many things have been changed in this update, so be safe and create a backup of your world before updating!
Big Features:
- Support for
BlockFluidFinitefluidlogging (blocks like Biomes O' Plenty honey)! - Support for non-source fluidlogging!
- Community Configs! More info here.
- Config rewrite. More info under "Small Features".
- Fluid logic rewrite.
- Many performance improvements.
- Many rendering-related crash fixes.
Small Features:
- Add contributors to this mod's credits.
- Add pixelated mod logo in the Fluidlogged API mod list gui.
- Cache quads from this mod's baked fluid model, which should improve fluid rendering performance.
- Config rewrite:
- Almost everything within
blacklist,fluidTags, andwhitelistcan now be supplied as a list or object, making the configs much easier to use overall. For example,fluids: [{fluidId: "lava"}, {fluidId: ["oil", "crude_oil"]}, {materialId: "water"}]andfluids: {fluidId: "lava"}are both valid. When something is supplied as a list, anything matching even just one entry will be accepted. - Changes to the
general.cfgin-game will now cause the world to re-render (like changing between fast and fancy graphics). - General config settings can now be changed in-game through the config gui!
- Heavily improve config performance.
- Improvements to block entries:
- New selectors ("classId" and "modId") to choose from, in addition to the existing "blockId" selector. "classId" is technical and requires an understanding of Java to use, but allows blocks to be selected based on whether they're assignable from the provided class. "modId" allows blocks to be selected based on whether they're from the provided mod.
- Optional "allowMissing" flag, set this to true if the game should not output an error to the log if the entry matches no blocks.
- Optional "boxes" flag, set this to any full horizontal boxes that this entry occupies in the world. For example,
boxes: {min: 0, max: 16}tells Fluidlogged API that this entry occupies a [X by 16 by Z] pixel-wide area, andboxes: [{min: 0, max: 5}, {min: 7, max: 16}]tells Fluidlogged API that there's a vertical gap of 2 pixels starting 5 pixels off the ground. Many modded blocks do not have collision boxes that accurately reflect their block model. Fluidlogged API tries to dynamically calculate fluidloggability based on collision boxes for non-source fluidlogging, so this setting allows that calculation to be accurate! - Optional "fluidLevels" flag, set this to whatever fluid levels any fluid must be for the entry to be fluidloggable. This should only be used in very specific scenarios, the "boxes" flag should almost always be used instead.
- Optional "requireSource" flag, set this to true if the entry should only be fluidloggable with source blocks. This should only be used in very specific scenarios, the "boxes" flag should almost always be used instead.
- The "canFluidFlow" flag now also accepts specific directions. For example,
canFluidFlow: true,canFluidFlow: "up", andcanFluidFlow: ["north", "south", "east", "west"]are all valid.
- Improvements to fluid entries:
- New "fluidId" (String) argument, returns the fluid whose id (or whose block id) matches. For example,
{fluidId: "water"}returns the vanilla water fluid. - New "materialId (String) argument, looks up the fluid whose id (or whose block id) matches, then returns all fluids whose block material matches the found fluid. For example,
{materialId: lava}finds the vanilla lava fluid, then returns all fluids that have that same block material. - The old format allowing entries to be made up entirely of one string (i.e.
"water") will still work.
- New "fluidId" (String) argument, returns the fluid whose id (or whose block id) matches. For example,
- New generated "builtin:material_lava" and "builtin:material_water" fluid tags provided by Fluidlogged API.
- New
fluidTags.cfgentry improvements:- Optional "allowMissing" flag, set this to true if the game should not output an error to the log if the entry matches no fluids.
- Optional "remove" flag, contains any fluid entries you want to remove from an existing fluid tag. While this flag is present, "fluids" is ignored and becomes optional.
- "allowDefaults" config setting (named "Allow Defaults" in the config gui) is now applied to everything, except user configs and
IFluidloggableblocks that haveoverrideApplyDefaultsSetting()return true. - "fancyFluidEntityCollision" config setting (named "Fancy Fluid Collision Mode" in the config gui) has been reworked, and now has four modes: [Never: Fancy fluid collision is never applied]. [Player Entities: Only apply fancy fluid collision to player entities]. [Medium Entities: Only apply fancy fluid collision to medium-sized entities (whose bounding box has no side greater than 3 blocks)]. [Always: Universally apply fancy fluid collision to all entities (this should never be used)]. This setting defaults to "Player Entities", but is set to "Always" or "Never" if an old fluidlogged api config is found.
- "lavalogVaporizeFlammable" config setting (named "Lava Vaporizing Mode" in the config gui) has been reworked, and now has three modes: [Flammable (All), Flammable (Fluidloggable), and Never]. This setting defaults to "Never", but is set to "Flammable (Fluidloggable)" or "Never" if an old fluidlogged api config is found.
- Now split into [
fluidlogged_api/blacklist.cfg,fluidlogged_api/fluidTags.cfg,fluidlogged_api/general.cfg,fluidlogged_api/whitelist.cfg] files, instead of all settings being in onefluidlogged_api.cfgfile. - New "bucketFluidlogging" config setting (named "Bucket Fluidlogging" in the config gui): controls how sneaking affects the player's ability to fluidlog blocks with a bucket. This setting has three modes: [Always: Players are always able to fluidlog blocks, regardless of whether they're sneaking. This is the Vanilla 1.13+ behavior]. [No Sneak: Players cannot fluidlog blocks while sneaking. This is the legacy Fluidlogged API (pre-v3.0.0) behavior]. [On Sneak: Players can only fluidlog blocks while sneaking]. This setting defaults to "Always", but is set to "No Sneak" if an old fluidlogged api config is found.
- New "downloadModConfigs" config setting (named "Community Configs Mode" in the config gui): controls how the online configs are handled. This setting has three modes: [Disabled: Prevents Fluidlogged API from updating its internal online config cache, and prevents it from being used in-game]. [Ignore Updates: Prevents Fluidlogged API from updating its internal online config cache, but still allows the existing cache to be applied in-game]. [Keep Updated: Allows Fluidlogged API to keep its internal online config cache up-to-date, and allows it to be applied in-game]. This setting defaults to "Keep Updated", but is set to "Disabled" if an old fluidlogged api config is found.
- New "fancyFluidRenderer" config setting (named "Fancy Vanilla Fluid Rendering" in the config gui): forces water and lava to use the same fluid renderer that modded fluids use. True by default.
- New "fixBadFluidMixing" config setting (named "Fix https://bugs.mojang.com/browse/MC-127108" in the config gui): while enabled, waterlogged blocks cannot turn lava into obsidian or cobblestone on physically unconnected sides (also applied to many modded fluid interactions). This setting defaults to true. This feature was requested by issue#193.
- New "fluidStateIsFireInsulator" config setting (named "Fluids Protect Against Fire" in the config gui): lets fireproof FluidStates fully protect blocks against fire. This setting defaults to true, but is set to false if an old fluidlogged api config is found.
- New "ignoreLowFluidCollision" config setting (named "Prevent Shallow Fluid Swimming" in the config gui): while enabled, players cannot swim in shallow fluids (like in Vanilla 1.13+). This setting defaults to true, but is set to false if an old fluidlogged api config is found.
- Old
fluidlogged_api.cfgconfig is automatically converted to the new format at runtime, with existing settings preserved. The old file in renamedfluidlogged_api.cfg_oldand afluidlogged_api.cfg_README.txtfile is created to inform players of the config system change. - New "nonSourceFluidlogging" config setting (named "Non-Source Fluidlogging" in the config gui): lets users completely disable the new non-source fluidlogging feature. This setting defaults to true, but is set to false if an old fluidlogged api config is found.
- Removed some now redundant config settings due to rewrites. This includes "debugASMPlugins", "fluidsBreakTorches", "fluidloggedFluidSpread", and "removeVerticalFluidloggedFluidSpread". Reasons: ["debugASMPlugins" was removed due to switching asm plugin output to the debug logs instead of normal logs]. ["fluidsBreakTorches" was removed due to fixing the bug that caused fluids to break certain blocks regardless of fluidloggability. If you want fluidloggable torches, you can now add them to your whitelist without worrying about them breaking]. ["fluidloggedFluidSpread" was removed due to rewriting fluid flow logic, and the addition of non-source fluidlogging. If non-source fluidlogging is disabled, this feature enables itself (though in a much better way, now being combined with
getOptimalFlowDirections())]. ["removeVerticalFluidloggedFluidSpread" was removed due to rewriting fluid flow logic, the addition of non-source fluidlogging superseding it, and it being a workaround for the limited fluidlogging functionality at the time]. - Server-side fluidlogging configs are now synced to all clients. This does not change the configs that are already saved to the client's system, and makes it now possible for clients to have their own different fluidlogging configs before joining a server.
- Almost everything within
- FluidStates can now provide a redstone output (like Thermal Foundation's destabilized redstone).
- Ladders can now be climbed by entities inside a fluid.
- Many new lang keys.
- Mine Carts on rails now slow down while they're in water.
- New
fluidloggedandfluidlogged_apitree commands:helpsubcommand: functions the same as the/forge helpsubcommand.printsubcommand: outputs all fluidlogging information to a file, making it easy for modpack devs to identify all fluidloggable blocks.reloadsubcommand: functions the same as thereloadFluidloggedAPIcommand.setfluidsubcommand: functions the same as the/setfluidcommand, and now accepts an optional fluid level argument.testsubcommand: tests the fluidloggability of whatever block is at the provided position.- All new commands will exist only as subcommands for the
/fluidloggedand/fluidloggedAPItree commands. The existing/reloadFluidloggedAPIand/setfluidcommands will remain.
- Players can no longer sprint in fluid blocks (like in vanilla 1.13+). This is automatically disabled while Aqua Acrobatics is installed.
- Remove non-functional "disable" button from Fluidlogged API in the mod list gui.
Bug Fixes:
- Apply FluidState-sensitivity transform to all
Block.getExplosionResistance()calls, to fix compatibility issues for blocks that overrideBlock.getExplosionResistance(). - Better fix for issue#151 (closes issue#226).
- Gaseous fluids inside fluidlogged hoppers can now flow out from the top.
- Fire now handles flammable FluidStates better.
- Fix a rare
World.isMaterialInBB()collision bug. - Fix fluid surface lighting (issue#191).
- Fix fluidlogged blocks rendering darker than they should.
- Fix issue#227.
- Fix lots of block neighbor update issues regarding FluidStates, heavily improving performance.
- Fix some bugs with the legacy data fixer.
- Fix under fluid surface face rendering conditions being inconsistent with vanilla (issue#202).
- Fixed all lighting issues for fluidlogged blocks with
useNeighborBrightness = true. - Fixed FluidState voiding if a fluidlogged flower pot is removed.
FluidState.of()now accounts forIExtendedBlockStateinstances, preventing possible duplicate FluidStates at runtime.- FluidStates are now saved in forge block snapshots.
- Forge no longer falsely blames Fluidlogged API for cascading world gen issues caused by other mods.
- No longer send render updates or observer updates when a vanilla fluid switches between static and dynamic (this reduces some lag when placing lots of blocks underwater).
- Rewrite fluidlogging bucket logic:
- No longer controlled by
FillBucketEvent, instead handled by class transformations. - Fixes fluidlogging not working for some modded fluid containers.
- Fixes possible fluid duplication bugs.
- No longer controlled by
- Rewrite the
FluidState.getExtendedStatecode:- Fixes all of the modded renderer crashes.
- Fixes all of the rendering oddities.
- Fixes incorrect flow direction.
- Fixes possible disconnected lines on fluid surfaces.
- The bevaior of flowing fluids is now consistant to their behavior without this mod installed (for vanilla and forge fluids). The only difference now should be that they can flow into fluidloggable blocks.
- This mod's client packets now get the client world from the message context (issue#204).
- Trapdoors now notify neighbors when opening/closing.
- Undesired FluidStates are now prevented during world generation (issue#189).
- Use mcmod.info file for mod properties.
- Vanilla fluid drip particles now work how you'd expect when there's no block under a fluidlogged block.
Compatibility Bug Fixes:
- General:
- All modded boats (that extend
EntityBoat) should now work properly (issue#194). - Apply
BlockWallfixes to all improperly coded modded wall blocks. - Disable fix for
IFluidBlock.getFilledPercentage(). It caused some inconsistencies with certain mods, like some modded fluids having a higher light level while Fluidlogged API was installed - Fix config crash with certain mod ids.
FluidBucketWrappernow accounts for moddedItemBucketinstances.- Some more modded farmland blocks now check for FluidStates (biomesoplenty, blue skies, moreplanets, nethercraft).
- Some more modded lilypad blocks now check for FluidStates (betweenlands, blue skies, journey into the light, moreplanets).
- All modded boats (that extend
- Actually Additions:
- Fluid placers and fluid collectors can now fluidlog and un-fluidlog blocks.
- Applied Energistics 2:
- Fluix crystal creation and crystal seed growth are now FluidState-sensitive.
- Astral Sorcery:
- Astral Sorcery's rendering IBlockAccess classes now implement IWorldProvider, fixing some dev-environment-only crashes.
- Crystal item entities and crystal tool item entities are now FluidState-sensitive.
- Betweenlands:
- Betweenlands mod fluid collision fixes.
- Betweenlands mod fluid rendering fixes.
- Fog fixes.
- Biomes O' Plenty:
- Apply Fluidlogged API's fluid mixing logic to honey.
- Fixed a possible honey duplication bug involving an unnecessary
FillBucketEventevent subscriber.
- Blue Skies:
- Fix Blue Skies' bucket fluid handler.
- Make Blue Skies' bucket use its
IFluidHandlerwhen placing/taking fluids.
- Botania:
- Allow Botania's void bucket item to recognise tanks and FluidStates.
- Buildcraft:
- Various parts of Buildcraft now account for FluidStates: pumps, flood gates, and anything utilizing Buildcraft's fluid utility methods.
- Cat Server:
- CB Multipart:
- Fix CB Multipart blocks voiding fluids when they are placed.
- Non-state-based CB Multipart parts can now be blacklisted from fluidlogging via groovyscript (see
PluginCBMultipart).
- Ceramics:
- The clay bucket now has an easier time fluidlogging blocks.
- CoFHCore:
- Fixes for CoFHCore fluid collision.
- Fixes for CoFHCore fluid mixing (side checks and use forge events).
- Fog fixes.
- Ender Core:
- Fog fixes.
- Ender IO:
- Fixes for Ender IO fluid collision.
- Industrial insulation (Ender IO's sponge block) is now FluidState-sensitive.
- Flopper:
- Floppers can now fluidlog and un-fluidlog blocks.
- Galacticraft:
- Fix crash with grating blocks (issue#222). This was done by making
BlockGratingfluidloggable, and removing all of its built-in "pseudo-fluidlogging" logic. This also fixes many other miscellaneous bugs and compatibility issues with the block in general. - Fix Galacticraft's fluid collision.
- Make Galacticraft's fluid fog texture overlay renderer account for FluidStates.
- Remove conflicting Galacticraft
getExtendedStatecode (fixes rendering bugs).
- Fix crash with grating blocks (issue#222). This was done by making
- Industrial Foregoing:
- Industrial Foregoing's pump is now FluidState-sensitive.
- Lycanites:
- Fixes for Lycanites fluid collision.
- Fixes for Lycanites fluid mixing (side checks, and use forge events).
- Fixes for Lycanites fluid source creation (use forge's source creation system, instead of what it was doing before).
- Mekanism:
- Fixed FluidState voiding if a fluidlogged mekanism container is removed.
- Make Mekanism's fluid tank use its
IFluidHandlerwhen placing/taking fluids. - Various parts of Mekanism now account for FluidStates: pumps, and anything utilizing Mekanism's fluid utility methods.
- Nethercraft:
- Fix Nethercraft's bucket fluid handler.
- Make Nethercraft's bucket use its
IFluidHandlerwhen placing/taking fluids. - Nethercraft's lava bucket now appears in its creative tab.
- OpenBlocks:
- OpenBlocks' sponge block is now FluidState-sensitive.
- Optifine:
- Fix (issue#211).
- Support for old versions of Optifine (like F5), by fixing crashes caused by Optifine loading classes too early.
- ProjectE:
- Amulets can now fluidlog blocks
- Amulets can now walk on FluidStates
- Amulet projectiles now account for FluidStates
- Fix lava placement breaking blocks.
- QuantumFlux:
- Give QuantumFlux's void bucket an
IFluidHandler. - Make QuantumFlux's void bucket sensitive to FluidStates.
- Make QuantumFlux's void bucket use its
IFluidHandlerwhen placing/taking fluids.
- Give QuantumFlux's void bucket an
- Random Things:
- Make Random Things' ender buckets sensitive to FluidStates.
- Reliquary:
- Make Reliquary's chalice use its
IFluidHandlerwhen placing/taking fluids.
- Make Reliquary's chalice use its
- Tiny Progressions:
- Allow Tiny Progressions' bucket to recognise tanks and FluidStates.
- Thermal Foundation:
- Thermal Foundation's gaseous fluids (aerotheum and glowstone) "enableSourceDissipate" setting now works while this mod is installed (and no longer removes the block here if fluidlogged).
- Thermal Foundation's gaseous fluids (aerotheum and glowstone) "enableSourceFloat" setting now works while this mod is installed (and no longer removes the block here if fluidlogged).
- Thermal Foundation's gaseous fluids (aerotheum and glowstone) "maxHeight" setting now works while this mod is installed.
- Thermal Foundation's mana fluid's "enableSourceFall" setting is now applied.
- Thermal Foundation's non-gaseous fluids "enableSourceFall" setting now works while this mod is installed (and no longer removes the block here if fluidlogged).
- Tropicraft:
- Entities inside Tropical Water now always move in the correct direction.
- Fog fixes.
- Tropicraft fences now use fluidlogging instead of a "WATER" boolean property.
- Tropicraft's tropical water can now be collected as a FluidState.
- Tropicraft's tropical water fluid is now compatible with forge's water fluid.
API Changes:
- Lots of code cleanup.
- Massive
api.worldpackage rewrite, aimed at "un-hardcoding" FluidState world access. - Move all of this mod's "IFluidloggable block"-related class transformations to a "fluidlogged_api/whitelist.jsonc" file.
- Moved some methods from
PluginBlockLiquid,PluginBlockFluidBase,PluginBlockFluidClassic, etc. into their own handler classes. - New 64 block flag to enable FluidState preservation during world gen for blocks that are added via the config system.
- Remove
api.asm.implpackage. api.asm.IASMPlugin:- New
addMethod()method that accepts a method signature. - New
findLocal()method that allows local variable whose indexes change to still be used. - New
getAccessorClass()method that returns the class name of a nested accessor interface. - New
overrideMethod()method that takes in aMethodNodedirectly, instead of a search condition.h condition. - New
transform()method that takes in aClassNode. - New
transformNode()method, splits some functionality offbyte[] transform(). - New
withAccessorClass()method that returns a formatted method descriptor string, with the accessor class added.
- New
api.block.BlockWaterloggedPlant:- Can be fluidlogged with non-source fluids, if they can be turned into sources (like in vanilla 1.13+).
- Now overrides the "applyDefaults" setting, but can still be manually blocked by dedicated blacklists entries.
api.block.IFluidloggable:- All blocks implementing
api.block.IFluidloggableare exempt from the world generation changes. - New
isFluidloggable()method that accepts aFluidState, to allow for non-source fluidlogging. - New
overrideApplyDefaultsSetting()method that allows blocks to keep their fluidlogging functionality while "applyDefaults" is turned off. - The old
isFluidloggable()andisFluidValid()methods are now only called by the newisFluidloggable()method.
- All blocks implementing
api.block.IFluidloggableFluid:- Removed, and replaced with the much better
api.fluid.IFluidloggableFluid. api.fluid.IFluidloggableFluidnow has all control over fluidlogging.
- Removed, and replaced with the much better
api.capability.IFluidStateCapability:- Drastically improve performance of
get()for chunks, now O(1) instead of O(2n). - Remove existing
getContainer()methods and replace them with onegetContainer()method that accepts a y position.
- Drastically improve performance of
api.capability.IFluidStateContainer:- New
getFluidState()method that accepts the block position as (x, y, z) integers. - New
getSerializedPositions()method that exposes all non-empty FluidState positions as an unmodifiable char set. - New
setFluidState()method that accepts the block position as (x, y, z) integers. - Replace existing
forEach()method that does not box the serialized positions.
- New
api.capability.IPosSerializer:- New interface used to serialize position data, to lighten the load put into chunks or packets when sending data to clients. Currently implemented by
api.capability.IFluidStateContainer.
- New interface used to serialize position data, to lighten the load put into chunks or packets when sending data to clients. Currently implemented by
api.datafix:- New package containing classes to help mods migrate away from "pseudo-fluidlogging".
api.event.FluidloggableEvent:- New
IBlockAccessandFluidStatefields. - Old World field is now deprecated, use IBlockAccess instead.
- New
api.event.FluidloggedAPIConfigsEvent:- New serverside events to modify the runtime
JsonObjectconfig data on read/reload, or to outright block them.
- New serverside events to modify the runtime
api.fluid.ICompatibleFluid:- New
getFluidCompatibility()method, allows fluids to specify fluid incompatibility. - The old
isCompatibleFluid()method is now only called bygetFluidCompatibility().
- New
api.fluid.IFlowCostFluid:- New interface that allows modded fluids to specify a "flow cost". For example, water has a flow cost of 1, and lava has a flow cost of 2 (or in the nether, lava has a flow cost of 1).
api.network.FluidloggedAPINetworkHandler:- Removed. The network wrapper now lives in
mod.FluidloggedAPI.
- Removed. The network wrapper now lives in
api.network.IClientMessageHandler:- New
getWorldFromContext()utility method that returns the world from the message context, prevents a very rare NPE crash. - New
handleMessage()method that accepts the message context. - The old
handleMessage()method is now deprecated.
- New
api.util.FluidState:- New
addLevel(int)method that returns this FluidState with the provided fluid level added. - New
createFluidStack()method returns a newFluidStackcontaining this FluidState's fluid. - New
get(access, x, y, z)method. Functions likeget(access, pos), but takes [x, y, z] directly. - New
getActualHeight(access, pos)method that returns the in-world height of this FluidState in pixels, 1 if this FluidState is submerged. - New
getDensity()method that returns this FluidState's fluid density. - New
getDensityDir()method that returns the densityDir of this FluidState's block if it's aBlockFluidBase, otherwise returns -1. - New
getDisplacements()method that returns the displacements of this FluidState's block if it's aBlockFluidBase, otherwise returns empty. - New
getDownDensityFace()method that returns the direction that this FluidState thinks is "down", usingFluidState.getDensityDir(). - New
getFlowCost(world)method that returns the flow cost of this fluid. - New
getFluidBlockHandler()method that returns this FluidState as anIFluidloggableFluid. - New
getFluidBox(access, pos)method that returns the in-world box that this fluid occupies. - New
getFromProvider(provider, x, y, z)method. Functions likegetFromProvider(provider, pos), but takes [x, y, z] directly. - New
getHeight()method that returns the approximate in-world height of this FluidState in pixels, using only this FluidState's level. - New
getMetadata()method that returns the metadata value of this FluidState'sIBlockState. - New
getQuantaFraction()method that returns the quantaFraction of this FluidState's block if it's aBlockFluidBase, otherwise returns 8/9. - New
getQuantaPerBlock()method that returns the quantaPerBlock of this FluidState's block if it's aBlockFluidBase, otherwise returns 8. - New
getQuantaPerBlockFloat()method that returns the quantaPerBlockFloat of this FluidState's block if it's aBlockFluidBase, otherwise returns 8. - New
getQuantaValue()method that returns the quanta value of this FluidState, using only this FluidState level. - New
getQuantaValue(access, pos)method that returns the quanta value of the FluidState (or wrapped fluidIBlockState) at the position, but only if it's compatible with this FluidState. Otherwise, returns -1, or 0 if the block is air. - New
getQuantaValueAbove(access, pos, int)that returns the quanta value of the FluidState (or wrapped fluidIBlockState) at the position, but only if it's compatible with this FluidState and the quanta value is higher than the "aboveThis" int parameter. Otherwise, returns -1. - New
getQuantaValueBelow(access, pos, int)that returns the quanta value of the FluidState (or wrapped fluidIBlockState) at the position, but only if it's compatible with this FluidState and the quanta value is below the "belowThis" int parameter. Otherwise, returns -1. - New
getTemperature()method that returns this FluidState's fluid temperature. - New
getUpDensityFace()method that returns the direction that this FluidState thinks is "up", usingFluidState.getDensityDir(). - New
getWrappedLevel(world)method that returns the flow cost if this FluidState is aBlockLiquidwaterfall, otherwise returns the fluid level. - New
isFluidloggable()method that returns true if this FluidState can be used for fluidlogging. - New
isSource()method that returns true if this FluidState is a source block. - New
toFlowing()method that returns this FluidState as aBlockDynamicLiquidif it's aBlockStaticLiquid, otherwise returns itself. - New
toSource()method that returns this FluidState as a source block. - New
toStatic()method that returns this FluidState as aBlockStaticLiquidif it's aBlockDynamicLiquid, otherwise returns itself. - New
withLevel(int)method that returns this FluidState with the provided fluid level. - No longer uses a
Supplier<IBlockState> statefield, instead uses aIBlockState statefield.
- New
api.util.FluidloggedUtils:- New
canCreateSource(state, world, pos)method that returns true if the fluidIBlockStatecan create source blocks. - New
canFluidOccupy(state, access, pos, fluidState)method that returns true if the FluidState physically fits outside the provided actual state. - New
getFluidOrReal(chunk, pos)method. Functions likegetFluidOrReal(access, pos), but uses aChunkinstead. - New
getFluidOrReal(chunk, pos, state)method. Functions likegetFluidOrReal(access, pos, state), but uses aChunkinstead. - New
getFluidState(chunk, pos)method. Functions likegetFluidState(access, pos), but uses aChunkinstead. - New
getFluidState(chunk, pos, state)method. Functions likegetFluidState(access, pos, state), but uses aChunkinstead. - New
isCompatibleFluid(fluidState, fluidState)method. Functions likeisCompatibleFluid(fluid. fluid), but uses FluidState instead. - New
isStateFluidloggable(state, access, pos, fluidState)method that returns true if the provided state is fluidloggable with the provided FluidState. - New
playVaporizeEffects(world, pos, fluidStack)utility method that runsFluid.vaporize()from the server, while still allowing clients to see any particles. - New
relightFluidBlock(world, pos, chunk. fluidState)method. Functions likerelightFluidBlock(world, pos, fluidState), but allows theChunkto be passed in. - New
setFluidToAir(world, pos, state, int)method that sets a FluidState or fluid IBlockState to air, and returns true if it was successful. - Performance improvements for
getFluidOrRealandgetFluidStatemethods by calling their alternative Chunk-based method when possible.
- New
- Support for
Bug Fixes:
- Fix start-up crash with Aqua Acrobatics (issue#181) (this bug only affected v2.2.6 of Fluidlogged API)
Features:
- New baked model for fluids (no longer use Forge one)
- Improved performance when rendering lots of fluid blocks
Bug Fixes:
- Fix fluid sides rarely randomly rendering very wrongly (issue#179)
Initial Modrinth Release

