From f06f66ccc287e4773e4259cbeba95fcb0f522363 Mon Sep 17 00:00:00 2001 From: paramat Date: Tue, 29 Nov 2016 02:28:55 +0000 Subject: [PATCH] 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. --- mods/boats/init.lua | 17 +++++++++-------- mods/carts/cart_entity.lua | 13 +++++++------ 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/mods/boats/init.lua b/mods/boats/init.lua index 26486f4e..9f1264b1 100644 --- a/mods/boats/init.lua +++ b/mods/boats/init.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 diff --git a/mods/carts/cart_entity.lua b/mods/carts/cart_entity.lua index a0a2d9f0..a0b0e3fa 100644 --- a/mods/carts/cart_entity.lua +++ b/mods/carts/cart_entity.lua @@ -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