diff --git a/README.md b/README.md index 8b7324f..765d505 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ Target: Run smoothly as possible, even on laggy servers. - Rail junction switching with the 'right/left' walking keys - Handbrake with the 'back' key - Support for non-minetest_game subgames +- Descend from cart using the `sneak` key ## Settings This mod can be adjusted to fit the preference of a player or server. Use the `Settings -> All Settings` dialog in the main menu or tune your diff --git a/cart_entity.lua b/cart_entity.lua index 07fe911..a30885c 100644 --- a/cart_entity.lua +++ b/cart_entity.lua @@ -95,6 +95,7 @@ end function cart_entity:on_detach_child(child) if child and child:get_player_name() == self.driver then self.driver = nil + boost_cart:manage_attachment(child, nil) end end @@ -303,6 +304,12 @@ function cart_entity:on_step(dtime) acc = -0.4 end end + if ctrl and ctrl.sneak then + -- Descend when sneak is pressed + boost_cart:manage_attachment(player, nil) + player = nil + ctrl = nil + end if acc then -- Slow down or speed up, depending on Y direction @@ -339,10 +346,13 @@ function cart_entity:on_step(dtime) if self.punched then -- Collect dropped items for _, obj_ in pairs(minetest.get_objects_inside_radius(pos, 1)) do - if not obj_:is_player() and - obj_:get_luaentity() and - not obj_:get_luaentity().physical_state and - obj_:get_luaentity().name == "__builtin:item" then + local ent = obj_:get_luaentity() + -- Careful here: physical_state and disable_physics are item-internal APIs + if ent and ent.name == "__builtin:item" and ent.physical_state then + -- Check API to support 5.2.0 and older + if ent.disable_physics then + ent:disable_physics() + end obj_:set_attach(self.object, "", {x=0, y=0, z=0}, {x=0, y=0, z=0}) self.attached_items[#self.attached_items + 1] = obj_