1+ S = minetest .get_translator (minetest .get_current_modname ())
2+
3+ better_commands .register_command (" ride" , {
4+ description = " Allows entities to mount or dismount other entities." ,
5+ params = " <target> <action> [vehicle|entityType] [bone] [pos] [rot] [teleportRules] [nameTag] [rideRules]" ,
6+ privs = {server = true },
7+ func = function (name , param , context )
8+ local split_param , err = better_commands .parse_params (param )
9+ if err or not split_param then return false , better_commands .error (err ), 0 end
10+ local target_selector = split_param [1 ]
11+ if not target_selector then return false , better_commands .error (S (" Missing target" )), 0 end
12+ local action = split_param [2 ] and split_param [2 ][3 ]
13+ if not action then return false , better_commands .error (S (" Missing action" )), 0 end
14+ if action == " mount" or action == " start_riding" then
15+ local vehicle_selector = split_param [3 ]
16+ local teleport_ride , bone , pos , rot , err =
17+ false , " " , vector .zero (), vector .zero ()
18+ if not vehicle_selector then return false , better_commands .error (S (" Missing vehicle" )), 0 end
19+ bone = split_param [4 ] and split_param [4 ][3 ]
20+ if not bone or bone == " _" then bone = " " end
21+ if split_param [5 ] then
22+ pos , err = better_commands .parse_pos (split_param , 5 , context )
23+ if err or not pos then return false , better_commands .error (err ), 0 end
24+ if split_param [8 ] then
25+ rot , err = better_commands .handle_vector2_rot (rot , split_param , 8 , false )
26+ if err or not rot then return false , better_commands .error (err ), 0 end
27+ local teleport_rules = split_param [10 ] and split_param [10 ][3 ]
28+ if teleport_rules then
29+ if teleport_rules == " teleport_ride" then
30+ teleport_ride = true
31+ elseif teleport_rules ~= " teleport_rider" then
32+ return false , better_commands .error (S (" Expected teleport_ride|teleport_rider, got @1" , teleport_rules )), 0
33+ end
34+ end
35+ end
36+ end
37+ local target , err = better_commands .parse_selector (target_selector , context , true )
38+ if err or not target then return false , better_commands .error (err ), 0 end
39+ local vehicle , err = better_commands .parse_selector (vehicle_selector , context , true )
40+ if err or not vehicle then return false , better_commands .error (err ), 0 end
41+ if target [1 ] == vehicle [1 ] then
42+ return false , better_commands .error (" Cannot attach entity to itself" ), 0
43+ end
44+ target [1 ]:set_attach (vehicle [1 ], bone , pos , rot )
45+ return true , S (" Attached @1 to @2" , better_commands .get_entity_name (target [1 ]), better_commands .get_entity_name (vehicle [1 ])), 1
46+ end
47+ return false , nil , 0
48+ end
49+ })
0 commit comments