Boats / carts: Fix and improve on_punch functions
authorparamat <mat.gregory@virginmedia.com>
Tue, 29 Nov 2016 02:28:55 +0000 (02:28 +0000)
committerparamat <mat.gregory@virginmedia.com>
Wed, 30 Nov 2016 02:44:44 +0000 (02:44 +0000)
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.

mods/boats/init.lua
mods/carts/cart_entity.lua

index 26486f4ed87cea9969e8316c6810499b3502da42..9f1264b12d204ea41369ad643baafbca75e0d2fa 100644 (file)
@@ -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
 
index a0a2d9f0dcdbcd6971d5ba9bbda76a5611e2b171..a0b0e3fa588de1689073937481ff2e9ac1f3dbaa 100644 (file)
@@ -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,11 +90,12 @@ 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
@@ -102,7 +103,7 @@ function cart_entity:on_punch(puncher, time_from_last_punch, tool_capabilities,
                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