FreeCarts Version 1.6 - Major bugfixes related to maximum speed and upgrades, Better Bedrock compatibility, Action Bar Overhaul & Nitro Status Display
This update introduces full Bedrock (Geyser/Floodgate) compatibility improvements, a completely rearchitected action bar system, and a live nitro status display.
Player Summary (Non-Developer Audience)
You will now visibly notice the speed differences between "un-upgraded", "max-upgraded", and "max-upgraded + nitro-engaged carts".
Fuelstation's block display models now compatible with Custom worlds from Multiverse-Core and similar plugins.
Bedrock players now see the fuel indicator correctly instead of a blank character.
The action bar now shows fuel, health, and nitro status as separate indicators, each toggleable independently from the cart GUI menu.
The nitro indicator shows exactly how many seconds of boost remain while active, a green tick when ready to use, and a countdown while cooling down — no more guessing when you can fire it again.
You can now use decimal values for fuelConsumptionRate in the config
Update Changelog (For Developers/Admins) Fix - critical issues within the upgrade system and cart speed mechanics
Fixed Engine & Nitro Upgrades Not Scaling Top Speed: Previously, cart movement was strictly hard-capped by the config's maxSpeed, meaning high-level Engine and Nitro upgrades were throttled and provided no noticeable top-speed benefits. The plugin now dynamically scales the internal maximum speed limits based on your cart's upgrade multiplier, allowing fully upgraded carts to reach their true potential.
Fixed Vanilla Server Speed Throttling: Bypassed Spigot's internal minecart velocity limits (which default to 0.4 blocks/tick) for player-driven carts by calculating and applying a safe, dynamic maxSpeed ceiling to active vehicles. Unoccupied carts correctly retain the config's base maxSpeed limits to prevent runaway vehicles from breaking physics.
Fixed Base Level (1) Upgrade Stat Bonuses: Fixed an oversight where newly placed, un-upgraded carts (Engine Level 1, Brake Level 1) were incorrectly receiving an immediate +15% speed and +25% brake bonus. Level 1 components now act as true baselines (1.0x multiplier), and upgrades properly scale starting at Level 2.
Fixed - critical issues within the FuelStation system and model mechanics.
Fixed fuel station models not spawning in Multiverse custom worlds by injecting execute in <dim> run into summon commands
Fixed getDimensionKey() helper to use World#getEnvironment() instead of folder name, supporting custom level-name in server.properties
Fixed entity fallback lookup always searching the overworld by including world name in the location key (world,x,y,z)
Fixed two Thread.sleep(50) calls blocking the main server thread on every station spawn
Fixed fuel stations in Multiverse worlds silently lost on startup due to world load race condition, resolved via ServerLoadEvent retry system
More Bedrock (Geyser) Compatibility
Fixed Fuel Level Icon in Action bar Displays Not Rendering on Bedrock: The ⛽ emoji is outside Bedrock's font atlas and rendered as a blank character. Bedrock players now receive ♨ as a fallback icon via a cached detection system.
Added Bedrock Player Cache: Geyser/Floodgate detection is now performed once per player session on join and stored in a HashSet.
Better Backward Compatibility Fixed Fuel Station Version Gate Blocking Mechanics on Pre-1.19.4 Servers: Fuel station hitbox, collision, refueling, and explosion mechanics no longer require 1.19.4+. The version gate now only blocks Block Display entity models. Pre-1.19.4 servers render fuel stations using the same sendBlockChange() fake block system already used for Bedrock players.
Action Bar System Rearchitecture
Extracted Action Bar Logic into Dedicated ActionBarHandler Class: Fuel and health display logic has been moved out of FuelHandler into a new ActionBarHandler, which owns the render task, Bedrock cache, per-stat toggle state, and stat registration pipeline.
Added Expandable CartStat Interface: Each action bar segment (fuel, health, nitro, etc.) is now an independently registered stat implementing CartStat. Adding new stats in the future requires no changes to existing classes.
Fixed Health Display Being Hidden by Fuel Toggle: Previously, the single hide_fuel_actionbar PDC key suppressed both fuel and health display together. Each stat now has its own independent PDC toggle key (hide_stat_fuel, hide_stat_health, etc.).
Moved Stat Registration Out of Main Class: FuelStat, HealthStat, and NitroStat are defined as named inner classes inside ActionBarHandler, keeping the code clean.
Action Bar Settings Menu
Replaced Single Toggle Button with Dedicated Submenu: The action bar toggle in the cart GUI is now a submenu.
Each Stat Has Its Own Toggle Button: Buttons display as green concrete (enabled) or red concrete (disabled).
New Nitro Status Display
Added Live Nitro Action Bar Stat: The nitro segment displays remaining active time in seconds while burning, a green tick when ready to engage, and a red remaining cooldown seconds while cooling down.
Added nitroActiveEnd Tracking: CartUpgradeHandler now tracks the nitro active end timestamp alongside the existing cooldown end timestamp, enabling accurate remaining-time calculations.
Fuel consumption enchancements
Changed fuelConsumptionRate from int to double to support decimal values like 0.2, 0.5
Added a fractional accumulator map inside the fuel consumption runnable so decimal rates drain correctly without precision loss.
Steps to Update the Plugin: 1. Download the new plugin ".jar" file.
2. Replace the existing file in your "/plugins/" folder with the newly downloaded file.
3.
[**MUST**] Delete the "config.yml" file and the contents of the "/lang/" folder.
4. Start the server to allow the plugin generate a new "config.yml" and fresh language files.
5. Configure the "config.yml" as desired and restart the server.