Skip to content

Commit f06f66c

Browse files
committedNov 30, 2016
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.
1 parent 04f0451 commit f06f66c

File tree

2 files changed

+16
-14
lines changed

2 files changed

+16
-14
lines changed
 

Diff for: ‎mods/boats/init.lua

+9-8
Original file line numberDiff line numberDiff line change
@@ -109,18 +109,19 @@ function boat.on_punch(self, puncher)
109109
end
110110
if not self.driver then
111111
self.removed = true
112+
local inv = puncher:get_inventory()
113+
if not minetest.setting_getbool("creative_mode")
114+
or not inv:contains_item("main", "boats:boat") then
115+
local leftover = inv:add_item("main", "boats:boat")
116+
-- if no room in inventory add a replacement boat to the world
117+
if not leftover:is_empty() then
118+
minetest.add_item(self.object:getpos(), leftover)
119+
end
120+
end
112121
-- delay remove to ensure player is detached
113122
minetest.after(0.1, function()
114123
self.object:remove()
115124
end)
116-
if not minetest.setting_getbool("creative_mode") then
117-
local inv = puncher:get_inventory()
118-
if inv:room_for_item("main", "boats:boat") then
119-
inv:add_item("main", "boats:boat")
120-
else
121-
minetest.add_item(self.object:getpos(), "boats:boat")
122-
end
123-
end
124125
end
125126
end
126127

Diff for: ‎mods/carts/cart_entity.lua

+7-6
Original file line numberDiff line numberDiff line change
@@ -62,22 +62,22 @@ function cart_entity:on_punch(puncher, time_from_last_punch, tool_capabilities,
6262
local node = minetest.get_node(pos).name
6363
self.railtype = minetest.get_item_group(node, "connect_to_raillike")
6464
end
65-
65+
-- Punched by non-player
6666
if not puncher or not puncher:is_player() then
6767
local cart_dir = carts:get_rail_direction(pos, self.old_dir, nil, nil, self.railtype)
6868
if vector.equals(cart_dir, {x=0, y=0, z=0}) then
6969
return
7070
end
71-
self.velocity = vector.multiply(cart_dir, 3)
71+
self.velocity = vector.multiply(cart_dir, 2)
7272
self.punched = true
7373
return
7474
end
75-
75+
-- Player digs cart by sneak-punch
7676
if puncher:get_player_control().sneak then
7777
if self.sound_handle then
7878
minetest.sound_stop(self.sound_handle)
7979
end
80-
-- Pick up cart: Drop all attachments
80+
-- Detach driver and items
8181
if self.driver then
8282
if self.old_pos then
8383
self.object:setpos(self.old_pos)
@@ -90,19 +90,20 @@ function cart_entity:on_punch(puncher, time_from_last_punch, tool_capabilities,
9090
obj_:set_detach()
9191
end
9292
end
93-
93+
-- Pick up cart
9494
local inv = puncher:get_inventory()
9595
if not minetest.setting_getbool("creative_mode")
9696
or not inv:contains_item("main", "carts:cart") then
9797
local leftover = inv:add_item("main", "carts:cart")
98+
-- If no room in inventory add a replacement cart to the world
9899
if not leftover:is_empty() then
99100
minetest.add_item(self.object:getpos(), leftover)
100101
end
101102
end
102103
self.object:remove()
103104
return
104105
end
105-
106+
-- Player punches cart to alter velocity
106107
local vel = self.object:getvelocity()
107108
if puncher:get_player_name() == self.driver then
108109
if math.abs(vel.x + vel.z) > carts.punch_speed_max then

0 commit comments

Comments
 (0)
Please sign in to comment.