self.object:set_acceleration({x = 0, y = -9.81, z = 0})
end,
on_punch = function(self, puncher, time_from_last_punch, tool_capabilities, dir)
- local pos = self.object:getpos()
+ local pos = self.object:get_pos()
minetest.add_item(pos, "boat:boat")
self.object:remove()
end,
end,
--check if the boat is stuck on land
check_if_on_land = function(self)
- local pos = self.object:getpos()
+ local pos = self.object:get_pos()
pos.y = pos.y - 0.37
local bottom_node = minetest.get_node(pos).name
if (bottom_node == "main:water" or bottom_node == "main:waterflow" or bottom_node == "air") then
local move = rider:get_player_control().up
self.moving = nil
if move then
- local currentvel = self.object:getvelocity()
+ local currentvel = self.object:get_velocity()
local goal = rider:get_look_dir()
goal = vector.multiply(goal,9)
local acceleration = vector.new(goal.x-currentvel.x,0,goal.z-currentvel.z)
--players push boat
push = function(self)
- local pos = self.object:getpos()
+ local pos = self.object:get_pos()
for _,object in ipairs(minetest.get_objects_inside_radius(pos, 1)) do
if object:is_player() and object:get_player_name() ~= self.rider then
- local player_pos = object:getpos()
+ local player_pos = object:get_pos()
pos.y = 0
player_pos.y = 0
- local currentvel = self.object:getvelocity()
+ local currentvel = self.object:get_velocity()
local vel = vector.subtract(pos, player_pos)
vel = vector.normalize(vel)
local distance = vector.distance(pos,player_pos)
--makes the boat float
float = function(self)
- local pos = self.object:getpos()
+ local pos = self.object:get_pos()
local node = minetest.get_node(pos).name
self.swimming = false
--flow normally if floating else don't
if node == "main:water" or node =="main:waterflow" then
self.swimming = true
- local vel = self.object:getvelocity()
+ local vel = self.object:get_velocity()
local goal = 3
local acceleration = vector.new(0,goal-vel.y,0)
self.object:add_velocity(acceleration)
--makes boats flow
flow = function(self)
- local pos = self.object:getpos()
+ local pos = self.object:get_pos()
pos.y = pos.y - 0.4
local node = minetest.get_node(pos).name
local node_above = minetest.get_node(vector.new(pos.x,pos.y+1,pos.z)).name
local goalz = 0
--print(node_above)
if (node == "main:waterflow" or node == "main:water" ) and not self.moving == true and (node_above ~= "main:water" and node_above ~= "main:waterflow") then
- local currentvel = self.object:getvelocity()
+ local currentvel = self.object:get_velocity()
local level = minetest.get_node_level(pos)
- local pos = self.object:getpos()
+ local pos = self.object:get_pos()
for x = -1,1 do
for y = -1,0 do
for z = -1,1 do
--slows the boat down
slowdown = function(self)
if not self.moving == true then
- local vel = self.object:getvelocity()
+ local vel = self.object:get_velocity()
local deceleration = vector.multiply(vel, -0.01)
self.object:add_velocity(deceleration)
end
self.object:set_acceleration({x = 0, y = -9.81, z = 0})
end,
on_punch = function(self, puncher, time_from_last_punch, tool_capabilities, dir)
- local pos = self.object:getpos()
+ local pos = self.object:get_pos()
minetest.add_item(pos, "boat:boat")
self.object:remove()
end,
local move = rider:get_player_control().up
self.moving = nil
if move then
- local currentvel = self.object:getvelocity()
+ local currentvel = self.object:get_velocity()
local goal = rider:get_look_dir()
goal = vector.multiply(goal,20)
local acceleration = vector.new(goal.x-currentvel.x,0,goal.z-currentvel.z)
--players push boat
push = function(self)
- local pos = self.object:getpos()
+ local pos = self.object:get_pos()
for _,object in ipairs(minetest.get_objects_inside_radius(pos, 1)) do
if object:is_player() and object:get_player_name() ~= self.rider then
- local player_pos = object:getpos()
+ local player_pos = object:get_pos()
pos.y = 0
player_pos.y = 0
- local currentvel = self.object:getvelocity()
+ local currentvel = self.object:get_velocity()
local vel = vector.subtract(pos, player_pos)
vel = vector.normalize(vel)
local distance = vector.distance(pos,player_pos)
--makes the boat float
float = function(self)
- local pos = self.object:getpos()
+ local pos = self.object:get_pos()
local pos2 = vector.new(pos.x,pos.y-3,pos.z)
local ray = minetest.raycast(pos, pos2, false, true)
if pointed_thing then
self.swimming = true
- local vel = self.object:getvelocity()
+ local vel = self.object:get_velocity()
local goal = 3
local acceleration = vector.new(0,goal-vel.y,0)
self.object:add_velocity(acceleration)
--slows the boat down
slowdown = function(self)
if not self.moving == true then
- local vel = self.object:getvelocity()
+ local vel = self.object:get_velocity()
local deceleration = vector.multiply(vel, -0.01)
self.object:add_velocity(deceleration)
end