
Wiki
Vehicle MC Wiki
Vehicle configuration, rig backends, service systems, terrain handling, and combat-ready admin workflows.
Getting Started
Start here for the real first-boot checks, module setup, and the runtime surfaces that affect every server.
Vehicle Authoring
Learn the top-down YAML flow so you know what belongs in config.yml, vehicles.yml, service files, and player-side UI files.
YML File Guides
Jump straight into the exact YAML file guide you need when you already know the filename and want the public explanation fast.
Vehicle Content
Build readable vehicle families, terrain behavior, browse layers, and driver feedback.
Service and World
Handle vehicle servicing, repair tools, fuel tanks, spawnpoints, and station behavior.
Combat and Ecosystem
Connect Vehicle MC to Duck Shot and the combat stack without losing control of performance or readability.
Vehicle MC has two different interaction layers:
- per-vehicle interaction rules in
vehicles.yml - plugin-wide pickup and storage rules in
config.yml
That split matters. If a trunk, horn, or pickup flow feels wrong, you need to know which side of the system is in charge before you start changing values.
The two files that shape interaction
Use vehicles.yml for behavior that belongs to one vehicle family:
- how close players must be to enter
- whether clicking any part can mount the vehicle
- trunk click behavior
- vehicle-level pickup allowances
- horn availability
Use config.yml for the global storage contract:
- whether pickup is enabled across the server
- whether stored vehicles preserve fuel, health, and trunk contents
- anti-dupe rules
- whether pickup is blocked during combat
Entry flow
The shared interaction defaults in vehicles.yml already expose a clean entry layer:
interaction:
enter:
maxDistance: 3.0
clickAnyPart: true
chooseSeat:
mode: NEAREST_TO_HIT
maxSeatDistance: 2.2What these settings change in practice:
maxDistancedecides how close the player must be before the vehicle feels usableclickAnyPartmakes large or complex rigs much easier to mountchooseSeat.mode: NEAREST_TO_HIThelps players land in the seat that matches the part they clicked instead of always falling into the same seatmaxSeatDistancekeeps seat selection from snapping to a seat that feels too far away from the clicked area
For a simple dirt bike, a loose entry radius usually feels good. For a tank or helicopter with multiple seats, keeping seat choice readable matters more than making the whole rig clickable from everywhere.
Exit flow
Vehicle exit is also controlled at the interaction layer:
interaction:
exit:
useSneakToExit: true
useSteerVehicleUnmount: trueThis is the usual live-server expectation:
- sneak to leave the seat
- let normal vehicle unmount input work where supported
If players are leaving vehicles by accident, tighten the exit path before changing seat offsets. If players feel trapped inside the vehicle, the exit rule is usually the first place to check.
Seat changing is a separate system. If you want passengers to move between seats only while the vehicle is almost stopped, handle that in runtime Modules, Physics, and Safety.
Trunks are both storage and part of the pickup flow
Vehicle trunks live in two branches at once:
stats.trunk.*decides whether a vehicle has usable storageinteraction.trunk.*decides how players open it
Example:
stats:
trunk:
enabled: true
rows: 3
usableSlots: 21
Â
interaction:
trunk:
openMethod: LEFT_CLICK
requireSneak: trueHow to read this:
rowscontrols total inventory heightusableSlotslets you leave part of the menu reserved or decorativeopenMethoddefines the player actionrequireSneakkeeps the trunk from fighting entry clicks
The current source defaults also reserve the last slot for the pickup button when that pickup mode is active. That makes trunk design part of the storage contract, not just a cosmetic menu choice.
Good public pattern:
- small scout vehicle: one row, very few usable slots
- transport vehicle: two or three rows, clear storage role
- combat platform: trunk only if it makes gameplay sense
Horns are simple, but they still need policy
Horn config is small and should stay small:
stats:
horn:
enabled: true
cooldownSeconds: 5
sound: vehicles.hornThis is enough to decide:
- whether the vehicle has an audible identity
- how spam-proof the horn is
- which sound lane fits the family
If every vehicle can honk constantly, the feature becomes noise instead of feedback. Cooldown is what keeps horns readable on busy servers.
Vehicle-level pickup vs global pickup
Vehicle-level pickup rules live in vehicles.yml:
interaction:
pickup:
enabled: true
method: SNEAK_RIGHT_CLICK
requireEmptyHand: false
drop:
mode: SPAWN_ITEMGlobal pickup rules live in config.yml:
pickup:
enabled: true
method: TRUNK_BUTTON
maxSpeed: 0.10
requireEmptyVehicle: true
allowPickupInCombat: false
preserveTrunkContents: true
preserveHealth: true
preserveFuel: trueThe important public rule:
- the vehicle can allow pickup
- the global config still decides whether pickup is truly available and how safe it is
That means a vehicle-level pickup switch is not the whole story. Public storage behavior is really the combination of both files.
Storage safety and anti-duplication
Pickup only feels trustworthy when the stored vehicle comes back with the right state.
These global safety settings matter as much as the interaction button:
pickup:
storage:
mode: SQLITE
preventDupes: true
Â
safety:
antiDupe:
enabled: true
spawnRequiresPersistedRecord: true
preventDoubleSpawnSameUuid: trueWhat this means to players and admins:
- a stored vehicle should come back as the same vehicle, not a partial copy
- stored fuel and health should survive if you chose to preserve them
- the same vehicle should not be able to exist twice because of lag, repeated clicks, or bad recovery flow
If your server expects players to treat vehicles as persistent assets, these settings are part of the feature, not an optional extra.
Permissions and public expectations
The plugin-wide permission defaults live in config.yml:
permissions:
enforce: true
defaults:
ride: vehiclemc.ride.*
drive: vehiclemc.drive.*This matters because interaction is not only about clicking the right spot. It is also about whether the player is allowed to:
- mount the vehicle
- drive it
- store it
- use it during combat
If interaction looks broken for only some players, check permissions before rewriting the vehicle family.
Recommended interaction patterns
Scout or civilian vehicle
- easy entry
- small trunk
- horn enabled
- pickup allowed only while stopped
Heavy combat vehicle
- readable seat layout
- strict exit and seat-switch behavior
- larger trunk only if it supports the role
- pickup usually disabled or heavily restricted
Service or logistics vehicle
- generous trunk
- simple entry
- horn optional
- preserved storage and fuel matter more than raw speed

