
BlockShips
build ships or airships out of blocks and sail or fly them smoothly - without client side mods or resource packs!
BlockShips 0.0.13
alpha8 апреля 2026 г.- light sources on custom ships will work now, thanks to integration with https://github.com/def9a2a4/DynLight
- double chest related duplication bug fixed
- TNT can now be fired from ship cannons (disabled by default, see config)
- lingering potions from cannons fixed
NEW FEATURES
DynLight Integration for Light-Emitting Ship Blocks (c5ad222, d10feb3)
Ship blocks that emit light (glowstone, lanterns, torches, etc.) now
produce dynamic lighting via DynLight plugin integration. BlockDisplay
entities are tagged with dynlight:
- Configurable via ship-lights toggle in config.yml.
- No compile-time dependency — tags are inert if DynLight is absent.
- Dynlight tags are applied to collision shulkers (not BlockDisplay entities) so DynLight can track their world position accurately.
- Blocks without colliders (torches, etc.) delegate their light to the nearest neighbor shulker (below first, then sides, then above).
- Blocks fully surrounded by opaque blocks are skipped via occlusion culling to avoid wasted light sources.
Configurable TNT Cannon Projectile Support (183284f)
TNT loaded into ship dispensers now spawns as primed TNT instead of dropping as an inert item. This enables functional TNT cannons on ships.
- Controlled by cannons.tnt-enabled (default: false) and cannons.tnt-fuse-ticks (default: 80) in config.yml.
- Disabled by default to prevent griefing on public servers.
Ref: https://github.com/def9a2a4/BlockShips/issues/15
BUG FIXES
Double Chest Item Duplication on Ship Assembly (5b882c2)
Fixed double chests duplicating their entire 54-slot shared inventory into each half during ship assembly, resulting in doubled items on disassembly.
Root cause: DoubleChestInventory was being serialized for both halves, so each half stored all 54 slots instead of its own 27.
Solution: Force double chests to single chests during block scanning so each half only serializes its own 27-slot inventory. BlockData is also stored as type=single to prevent auto-merging on disassembly.
Fixes: https://github.com/def9a2a4/BlockShips/issues/12
Lingering Potion Visual When Fired From Ship Cannons (fe03538)
Lingering potions fired from ship dispensers appeared as generic thrown potions on the client side because the potion item data was set after the entity entered the world.
Solution: Set potion item before entity enters the world by using lambda-based spawn, so clients see the correct lingering potion particle and bottle texture.
Fixes: https://github.com/def9a2a4/BlockShips/issues/15
Lingering Potion Using Splash Behavior on Impact (d994684)
Lingering potions fired from ship cannons were splashing on impact instead of creating an area effect cloud, because they were spawned as ThrownPotion entities.
Solution: Use LingeringPotion entity class so lingering potions correctly create an area effect cloud on impact.
BlockShips 0.0.12
alpha29 января 2026 г.NEW FEATURES
Seat Highlighting & Third-Person Camera Distance (517a89c)
-
/blockships highlightseatscommand: Look at a ship and run this command to highlight all seats with colored particles. Orange particles indicate passenger seats, red particles indicate driver seat. Particles remain visible for 5 seconds. -
Seats button in ship wheel menu: Shows seat count and current occupancy.
-
Camera distance customization: New camera-distance config option for prefab ships. Per-ship camera distance setting for custom ships via +/- buttons in menu. Auto-calculates sensible defaults based on ship block count. Range: 4-32 blocks (Minecraft 1.21.6+ via GENERIC_CAMERA_DISTANCE attribute).
Ship Health HUD Display (b84f36d)
When players ride seat shulkers, the Minecraft health bar HUD now shows the ship's health (similar to riding a horse). Health syncs after melee damage, projectile damage, and health regeneration. Ships with 40 HP or less display directly (1:1 mapping). Ships with more than 40 HP scale proportionally to 20 hearts max.
Ship Wheel Info Message (fef8bb1)
Right-clicking a ship with a ship wheel now shows a helpful message. For custom ships: explains wheels cannot be added to assembled ships and to use sneak+right-click for menu. For prefab ships: explains wheels are for custom builds and that prefabs come from ship kits. Also fixes PlayerInteractEntityEvent firing twice by filtering to main hand only. Motivated by user confusion in issues: #1 #3
BigShip Seats (e9f5c4c)
Added 3 new seats to the big ship prefab: two side passenger seats and one crow's nest seat.
BUG FIXES
Banner Rendering Fix (e164326)
Fixed multiple banner display issues on ships:
-
Plain banners now detected: Previously only patterned banners worked. Now checks for banner_rotation and banner_facing keys in addition to banner_patterns, so any banner item works.
-
Floor banner rotation corrected: Banners now face the correct direction.
-
Wall banner positioning fixed: Correct Y offset and Z offset toward wall.
-
Code refactor: Extracted calculateBannerTransform() helper to eliminate duplication across 3 locations.
Ladder Duplication Bug Fix (dfd105b)
Fixed blocks that need support (ladders, torches, etc.) dropping as items during ship assembly.
Root cause: isAttachable() was incomplete, causing supported blocks to be removed after their support blocks.
Solution: Refactored to use precomputed EnumSet for O(1) lookups. Added missing blocks: ladder, lantern, bell, candle, repeater, comparator, tripwire, rail, redstone wire. Added copper torches and copper lanterns to allowed blocks list.
Chunk Test Improvements (c62495b)
Increased CHUNK_UNLOAD_WAIT_MS from 5s to 20s for more reliable chunk unloading in tests. Added /forceload query verification after forceload removal.
BlockShips 0.0.11
alpha29 января 2026 г.New Features
Wider Minecraft Version Support
- New compatibility layer supports Minecraft 1.21.1 through 1.21.11
- purpur support in addition to existing paper support
- Pre-1.21.2: Uses S+Space for airship descent (sprint unavailable in packet)
Better ship collider handling
- standing on ship decks works more reliably, no longer bugs out as much
/blockships dismount Command
- New command allows players to force-dismount from ships when normal methods fail
- Permission:
blockships.dismount(default: true)
Health Regeneration Enabled by Default
- All ship types now regenerate 1.0 HP/second by default (was 0.0)
- Applies to: galley, airship, skiff, and custom ships
Performance & Stability Improvements
- Reduced GC pressure via object pooling (33+ reusable work objects)
- Async I/O for ship recovery prevents main thread blocking during chunk loads
- Thread-safe steering packet handling with cached reflection methods
- Early termination in terrain collision detection
Bug Fixes
Sneak-to-Dismount for Shulker Seats
- Fixed sneak (shift) dismount for Shulker seats across all Minecraft versions
- Version-specific packet handling for 1.21.2+ and 1.21.3+ formats
- Applies to all ship passengers, not just the driver
Ship Entity Persistence on Player Disconnect
- New
PlayerQuitEventandPlayerKickEventhandlers - Ejects player from ship seat before disconnect completes
- Prevents vanilla Minecraft from removing ridden entities
- Properly frees seat for other players
Dismount Re-mount Prevention
- Fixed: Players being forced back into seats after intentional dismount
updateCollisionPositions()now checksoccupiedSeatIndicesbefore re-mountingfreeSeat()removes seat from occupied set, preventing re-mount
Input State Cleanup on Driver Exit
freeSeat()now clears ALL input flags when driver exits- Prevents ships from continuing movement with stale input state
- Airships get
currentYVelocity = 0; water ships snap to neutral buoyancy
Passenger Relationship Verification
- Added every-tick check that shulker is still passenger of carrier
- Fixes broken relationships on chunk reload
- Re-adds passenger if relationship breaks (even on stationary ships)
Collision Shulker Spawn Error Handling
- Wrapped collider spawn in try-catch blocks
- Cleans up dangling carriers/shulkers on failure
- Prevents resource leaks and NPEs during configuration
Attribute Compatibility Fixes
- MAX_HEALTH and SCALE access wrapped with null checks and version comatibilities
- Health regeneration wrapped in try-catch to prevent tick crashes
Pre-1.21.9 Display Rotation Fix
- Added
spawnYawtracking for display rotation compatibility - Prevents double-rotation bug on older versions
- Display rotation uses delta from spawn instead of absolute yaw
Removed Non-functional Deck Physics
- Deleted
applyDeckPhysics()andpushPlayerOutOfShulker()methods - These caused buggy movements on ships, and were non-functional, removed them
BlockShips 0.0.10
alpha21 января 2026 г.Ship Damage Feedback & Audio System
- Added visual & audio damage feedback
- Added ship movement sounds
- Added chat message alerts to riders when their ship is destroyed
- Added configurable volume controls in
config.ymlfor damage, movement, cannon, and lead break sounds
Interactive Help System
- Info button in ship wheel menu with question mark player head
- Paginated help book covering controls, getting started, riding, menu, cannons, weight/buoyancy
Drowned Ship Captains
- Rare drowned mobs that naturally spawn holding ship wheels (5% default chance)
- Guaranteed ship wheel drop on death
- New command:
/blockships spawndrowned - can be disabled in
config.yml
Ship Recovery System Improvements
Major architectural improvements for ships spanning multiple chunks, but it's still buggy. Try not to have ships spanning more than 2-3 chunks.
Misc
- Configuration validation - New
ConfigValidatorclass for detecting config mismatches - New blocks - Added hay bales, bells, flower pots, candles, cauldron variants to
blocks.yml - Buoyancy fix - Fixed kelp and seagrass detection (they aren't actually waterlogged)
- Collision tuning - Reduced terrain collision feedback on prefab small ship
BlockShips 0.0.9
alpha15 января 2026 г.New Features
- Recipe Unlock System: BlockShips recipes now unlock when players complete a configurable advancement (default:
smelt_iron) - Automatic Recipe Granting: Players who already have the required advancement will receive recipes when they join the server
- New Config Option: Added
recipe-unlock-advancementsetting to customize which advancement unlocks BlockShips recipes
Bug Fixes
- Fixed Ship Persistence: Ships now properly persist across server restarts. Previously, ships were being destroyed during shutdown before Minecraft could save them
- Fixed
destroyallCommand: The command now properly cleans up YAML storage files when removing ships - ProtocolLib Warning: Added a warning message when running BlockShips commands if ProtocolLib is not installed
Technical Changes
- Added
ShipRegistry.clear()method that clears the in-memory registry without destroying entities, allowing proper persistence - Improved shutdown handling to preserve entities for natural Minecraft persistence