Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
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.
Loading branch information
Showing
2 changed files
with
16 additions
and
14 deletions .
+9
−8
mods/boats/init.lua
+7
−6
mods/carts/cart_entity.lua
@@ -109,18 +109,19 @@ function boat.on_punch(self, puncher)
end
if not self .driver then
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
minetest.after (0.1 , function ()
self .object :remove ()
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
@@ -62,22 +62,22 @@ function cart_entity:on_punch(puncher, time_from_last_punch, tool_capabilities,
local node = minetest.get_node (pos).name
self .railtype = minetest.get_item_group (node, " connect_to_raillike" )
end
-- Punched by non-player
if not puncher or not puncher:is_player () then
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
return
end
self .velocity = vector.multiply (cart_dir, 3 )
self .velocity = vector.multiply (cart_dir, 2 )
self .punched = true
return
end
-- Player digs cart by sneak-punch
if puncher:get_player_control ().sneak then
if self .sound_handle then
minetest.sound_stop (self .sound_handle )
end
-- Pick up cart: Drop all attachments
-- Detach driver and items
if self .driver then
if self .old_pos then
self .object :setpos (self .old_pos )
@@ -90,19 +90,20 @@ function cart_entity:on_punch(puncher, time_from_last_punch, tool_capabilities,
obj_:set_detach ()
end
end
-- Pick up cart
local inv = puncher:get_inventory ()
if not minetest.setting_getbool (" creative_mode" )
or not inv:contains_item (" main" , " carts:cart" ) then
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
minetest.add_item (self .object :getpos (), leftover)
end
end
self .object :remove ()
return
end
-- Player punches cart to alter velocity
local vel = self .object :getvelocity ()
if puncher:get_player_name () == self .driver then
if math.abs (vel.x + vel.z ) > carts.punch_speed_max then
Toggle all file notes
Toggle all file annotations