forked from Mineclonia/Mineclonia
Add support for mobs and boats in minecarts
This commit is contained in:
parent
eddbfb4b5c
commit
c593036b61
|
@ -12,8 +12,14 @@ local function detach_driver(self)
|
|||
if not self._driver then
|
||||
return
|
||||
end
|
||||
mcl_player.player_attached[self._driver] = nil
|
||||
local player = minetest.get_player_by_name(self._driver)
|
||||
if not self._driver:is_player() then
|
||||
self._driver:set_detach()
|
||||
self._driver = nil
|
||||
return
|
||||
end
|
||||
local player_name = self._driver:get_player_name()
|
||||
mcl_player.player_attached[player_name] = nil
|
||||
local player = minetest.get_player_by_name(player_name)
|
||||
self._driver = nil
|
||||
self._start_pos = nil
|
||||
if player then
|
||||
|
@ -151,7 +157,7 @@ local function register_entity(entity_id, mesh, textures, drop, on_rightclick, o
|
|||
end
|
||||
|
||||
local vel = self.object:get_velocity()
|
||||
if puncher:get_player_name() == self._driver then
|
||||
if self._driver and puncher:get_player_name() == self._driver:get_player_name() then
|
||||
if math.abs(vel.x + vel.z) > 7 then
|
||||
return
|
||||
end
|
||||
|
@ -175,9 +181,22 @@ local function register_entity(entity_id, mesh, textures, drop, on_rightclick, o
|
|||
cart.on_activate_by_rail = on_activate_by_rail
|
||||
|
||||
function cart:on_step(dtime)
|
||||
local entity_name = self.object:get_luaentity().name
|
||||
if entity_name == "mcl_minecarts:minecart" then
|
||||
for _, obj in ipairs(minetest.get_objects_inside_radius(self.object:get_pos(), 1.3)) do
|
||||
local entity = obj:get_luaentity()
|
||||
if not self._driver and entity and ( entity._cmi_is_mob or entity.name == "mcl_boats:boat" ) and not obj:get_attach() then
|
||||
self._driver = obj
|
||||
obj:set_attach(self.object)
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local ctrl, player = nil, nil
|
||||
if self._driver then
|
||||
player = minetest.get_player_by_name(self._driver)
|
||||
if self._driver and self._driver:is_player() then
|
||||
local player_name = self._driver:get_player_name()
|
||||
player = minetest.get_player_by_name(player_name)
|
||||
if player then
|
||||
ctrl = player:get_player_control()
|
||||
-- player detach
|
||||
|
@ -446,7 +465,7 @@ local function register_entity(entity_id, mesh, textures, drop, on_rightclick, o
|
|||
end
|
||||
|
||||
-- Give achievement when player reached a distance of 1000 nodes from the start position
|
||||
if self._driver and (vector.distance(self._start_pos, pos) >= 1000) then
|
||||
if self._driver and self._driver:is_player() and (vector.distance(self._start_pos, pos) >= 1000) then
|
||||
awards.unlock(self._driver, "mcl:onARail")
|
||||
end
|
||||
|
||||
|
@ -634,7 +653,7 @@ register_minecart(
|
|||
if self._driver and player_name == self._driver then
|
||||
detach_driver(self)
|
||||
elseif not self._driver then
|
||||
self._driver = player_name
|
||||
self._driver = clicker
|
||||
self._start_pos = self.object:get_pos()
|
||||
mcl_player.player_attached[player_name] = true
|
||||
clicker:set_attach(self.object, "", {x=0, y=-1.75, z=-2}, {x=0, y=0, z=0})
|
||||
|
|
Loading…
Reference in New Issue