diff --git a/mods/HUD/mcl_achievements/depends.txt b/mods/HUD/mcl_achievements/depends.txt index 8e270b8ea..c541f27a1 100644 --- a/mods/HUD/mcl_achievements/depends.txt +++ b/mods/HUD/mcl_achievements/depends.txt @@ -3,6 +3,5 @@ mcl_tools mcl_core mcl_cake mcl_mobitems -mcl_minecarts mcl_flowerpots intllib? diff --git a/mods/HUD/mcl_achievements/init.lua b/mods/HUD/mcl_achievements/init.lua index ca807e0b2..7dc760531 100644 --- a/mods/HUD/mcl_achievements/init.lua +++ b/mods/HUD/mcl_achievements/init.lua @@ -134,6 +134,15 @@ awards.register_achievement("mcl:cookFish", { icon = "mcl_fishing_fish_cooked.png", }) +-- Other achievements triggered outside of mcl_achievements + +-- Triggered in mcl_minecarts +awards.register_achievement("mcl:onARail", { + title = S("On A Rail"), + description = S("Travel by minecart for at least 1000 meters from your starting point in a single ride."), + icon = "default_rail.png", +}) + -- NON-PC ACHIEVEMENTS (XBox, Pocket Edition, etc.) awards.register_achievement("mcl:n_placeDispenser", { @@ -194,20 +203,6 @@ awards.register_achievement("mcl:n_emeralds", { } }) --- NOT IN MINECRAFT - --- Replacement for “On a Rail” -awards.register_achievement("mcl:f_placeRails", { - title = S("Railroad"), - icon = "default_rail.png", - trigger = { - type = "place", - node = "mcl_minecarts:rail", - target = 1000, - } -}) - - -- Show achievements formspec when the button was pressed minetest.register_on_player_receive_fields(function(player, formname, fields) if fields.__mcl_achievements then diff --git a/mods/ITEMS/mcl_minecarts/depends.txt b/mods/ITEMS/mcl_minecarts/depends.txt index c77c4d8db..33340b4bd 100644 --- a/mods/ITEMS/mcl_minecarts/depends.txt +++ b/mods/ITEMS/mcl_minecarts/depends.txt @@ -1,4 +1,5 @@ mcl_core mcl_sounds mcl_player +mcl_achievements mesecons? diff --git a/mods/ITEMS/mcl_minecarts/init.lua b/mods/ITEMS/mcl_minecarts/init.lua index e2a963f93..8df6413b0 100644 --- a/mods/ITEMS/mcl_minecarts/init.lua +++ b/mods/ITEMS/mcl_minecarts/init.lua @@ -24,6 +24,7 @@ mcl_minecarts.cart = { _driver = nil, _punched = false, -- used to re-send _velocity and position _velocity = {x=0, y=0, z=0}, -- only used on punch + _start_pos = nil, -- Used to calculate distance for “On A Rail” achievement _old_dir = {x=0, y=0, z=0}, _old_pos = nil, _old_switch = 0, @@ -37,9 +38,11 @@ function mcl_minecarts.cart:on_rightclick(clicker) local player_name = clicker:get_player_name() if self._driver and player_name == self._driver then self._driver = nil + self._start_pos = nil clicker:set_detach() elseif not self._driver then self._driver = player_name + self._start_pos = self.object:getpos() mcl_player.player_attached[player_name] = true clicker:set_attach(self.object, "", {x=0, y=3, z=0}, {x=0, y=0, z=0}) end @@ -227,6 +230,11 @@ function mcl_minecarts.cart:on_step(dtime) if self._punched then self._punched = false end + + -- Give achievement when player reached a distance of 1000 nodes from the start position + if self._driver and (vector.distance(self._start_pos, pos) >= 1000) then + awards.unlock(self._driver, "mcl:onARail") + end if not (update.vel or update.pos) then return