mirror of
https://github.com/minetest/minetest_game.git
synced 2024-12-22 23:10:17 +01:00
Boats / carts: Fix and improve on_punch functions
Boats: Previously, boats were not added to inventory in creative mode, fix. In creative mode multiple boats will not be added to inventory. Add comment. Carts: Set speed to 2 if punched by a non-player, to match the effect of a player punch. Add comments.
This commit is contained in:
parent
04f045158f
commit
f06f66ccc2
@ -109,18 +109,19 @@ function boat.on_punch(self, puncher)
|
|||||||
end
|
end
|
||||||
if not self.driver then
|
if not self.driver then
|
||||||
self.removed = true
|
self.removed = true
|
||||||
|
local inv = puncher:get_inventory()
|
||||||
|
if not minetest.setting_getbool("creative_mode")
|
||||||
|
or not inv:contains_item("main", "boats:boat") then
|
||||||
|
local leftover = inv:add_item("main", "boats:boat")
|
||||||
|
-- if no room in inventory add a replacement boat to the world
|
||||||
|
if not leftover:is_empty() then
|
||||||
|
minetest.add_item(self.object:getpos(), leftover)
|
||||||
|
end
|
||||||
|
end
|
||||||
-- delay remove to ensure player is detached
|
-- delay remove to ensure player is detached
|
||||||
minetest.after(0.1, function()
|
minetest.after(0.1, function()
|
||||||
self.object:remove()
|
self.object:remove()
|
||||||
end)
|
end)
|
||||||
if not minetest.setting_getbool("creative_mode") then
|
|
||||||
local inv = puncher:get_inventory()
|
|
||||||
if inv:room_for_item("main", "boats:boat") then
|
|
||||||
inv:add_item("main", "boats:boat")
|
|
||||||
else
|
|
||||||
minetest.add_item(self.object:getpos(), "boats:boat")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -62,22 +62,22 @@ function cart_entity:on_punch(puncher, time_from_last_punch, tool_capabilities,
|
|||||||
local node = minetest.get_node(pos).name
|
local node = minetest.get_node(pos).name
|
||||||
self.railtype = minetest.get_item_group(node, "connect_to_raillike")
|
self.railtype = minetest.get_item_group(node, "connect_to_raillike")
|
||||||
end
|
end
|
||||||
|
-- Punched by non-player
|
||||||
if not puncher or not puncher:is_player() then
|
if not puncher or not puncher:is_player() then
|
||||||
local cart_dir = carts:get_rail_direction(pos, self.old_dir, nil, nil, self.railtype)
|
local cart_dir = carts:get_rail_direction(pos, self.old_dir, nil, nil, self.railtype)
|
||||||
if vector.equals(cart_dir, {x=0, y=0, z=0}) then
|
if vector.equals(cart_dir, {x=0, y=0, z=0}) then
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
self.velocity = vector.multiply(cart_dir, 3)
|
self.velocity = vector.multiply(cart_dir, 2)
|
||||||
self.punched = true
|
self.punched = true
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
-- Player digs cart by sneak-punch
|
||||||
if puncher:get_player_control().sneak then
|
if puncher:get_player_control().sneak then
|
||||||
if self.sound_handle then
|
if self.sound_handle then
|
||||||
minetest.sound_stop(self.sound_handle)
|
minetest.sound_stop(self.sound_handle)
|
||||||
end
|
end
|
||||||
-- Pick up cart: Drop all attachments
|
-- Detach driver and items
|
||||||
if self.driver then
|
if self.driver then
|
||||||
if self.old_pos then
|
if self.old_pos then
|
||||||
self.object:setpos(self.old_pos)
|
self.object:setpos(self.old_pos)
|
||||||
@ -90,11 +90,12 @@ function cart_entity:on_punch(puncher, time_from_last_punch, tool_capabilities,
|
|||||||
obj_:set_detach()
|
obj_:set_detach()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
-- Pick up cart
|
||||||
local inv = puncher:get_inventory()
|
local inv = puncher:get_inventory()
|
||||||
if not minetest.setting_getbool("creative_mode")
|
if not minetest.setting_getbool("creative_mode")
|
||||||
or not inv:contains_item("main", "carts:cart") then
|
or not inv:contains_item("main", "carts:cart") then
|
||||||
local leftover = inv:add_item("main", "carts:cart")
|
local leftover = inv:add_item("main", "carts:cart")
|
||||||
|
-- If no room in inventory add a replacement cart to the world
|
||||||
if not leftover:is_empty() then
|
if not leftover:is_empty() then
|
||||||
minetest.add_item(self.object:getpos(), leftover)
|
minetest.add_item(self.object:getpos(), leftover)
|
||||||
end
|
end
|
||||||
@ -102,7 +103,7 @@ function cart_entity:on_punch(puncher, time_from_last_punch, tool_capabilities,
|
|||||||
self.object:remove()
|
self.object:remove()
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
-- Player punches cart to alter velocity
|
||||||
local vel = self.object:getvelocity()
|
local vel = self.object:getvelocity()
|
||||||
if puncher:get_player_name() == self.driver then
|
if puncher:get_player_name() == self.driver then
|
||||||
if math.abs(vel.x + vel.z) > carts.punch_speed_max then
|
if math.abs(vel.x + vel.z) > carts.punch_speed_max then
|
||||||
|
Loading…
Reference in New Issue
Block a user