diff --git a/CHANGELOG.md b/CHANGELOG.md index e6b46da..709aa15 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,26 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## [Unreleased] +## [1.0.3] - 2020-02-15 + +### Fixed + +- Fix an issue with gauges occasionally no longer appearing above a player. + +### Changed + +- Improved the reliability of the Minetest version check (for compatibility with 0.4.17). + +## [1.0.2] - 2020-01-16 + +### Fixed + +- Fix crash when creating an entity if a player leaves the server quickly. + +### Changed + +- Restore Minetest 0.4.17 support. The version check works only with `minetest_game` with the `player_api` mod added in Minetest 5.0. + ## [1.0.1] - 2020-01-01 ### Changed @@ -17,5 +37,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Initial versioned release. -[Unreleased]: https://github.com/minetest-mods/gauges/compare/v1.0.1...HEAD +[Unreleased]: https://github.com/minetest-mods/gauges/compare/v1.0.3...HEAD +[1.0.3]: https://github.com/minetest-mods/gauges/compare/v1.0.2...v1.0.3 +[1.0.2]: https://github.com/minetest-mods/gauges/compare/v1.0.1...v1.0.2 [1.0.1]: https://github.com/minetest-mods/gauges/compare/v1.0.0...v1.0.1 diff --git a/README.md b/README.md index 89e326f..ed04b79 100644 --- a/README.md +++ b/README.md @@ -60,9 +60,8 @@ on that line. ## Version compatibility -Gauges is currently primarily tested with Minetest 5.1.0. It may or may not work -with newer or older versions. Issues arising in versions older than 5.0.0 -will generally not be fixed. +Gauges currently supports Minetest 5.0 and later, as well as 0.4.17. +Issues arising in versions older than 5.0 will generally not be fixed. ## License diff --git a/init.lua b/init.lua index 88775c4..e0e9668 100644 --- a/init.lua +++ b/init.lua @@ -7,26 +7,44 @@ if minetest.settings:get_bool("health_bars") == false or not minetest.settings:get_bool("enable_damage") then return end --- Localize the vector distance function for better performance, as it's called --- on every step +-- Localize the vector distance function for better performance, +-- as it's called on every step local vector_distance = vector.distance +local function add_gauge(player) + if player and player:is_player() then + local entity = minetest.add_entity(player:get_pos(), "gauges:hp_bar") + local height = 19 + + -- Check for Minetest 0.4.17 and adjust the entity height if needed + -- (The entity height offset was changed in Minetest 5.0.0.) + local version = tonumber(minetest.get_version().string:sub(1, 1)) + if version and version < 5 then + height = 9 + end + + entity:set_attach(player, "", {x=0, y=height, z=0}, {x=0, y=0, z=0}) + entity:get_luaentity().wielder = player + end +end + minetest.register_entity("gauges:hp_bar", { visual = "sprite", visual_size = {x=1, y=1/16, z=1}, - -- The texture is changed later in the code textures = {"blank.png"}, collisionbox = {0}, physical = false, on_step = function(self) local player = self.wielder + local gauge = self.object - if not player or - not minetest.is_player(player) or - vector_distance(player:get_pos(), self.object:get_pos()) > 3 - then - self.object:remove() + if not player or not player:is_player() then + gauge:remove() + return + elseif vector_distance(player:get_pos(), gauge:get_pos()) > 3 then + gauge:remove() + add_gauge(player) return end @@ -34,10 +52,10 @@ minetest.register_entity("gauges:hp_bar", { local breath = player:get_breath() <= 10 and player:get_breath() or 11 if self.hp ~= hp or self.breath ~= breath then - self.object:set_properties({ + gauge:set_properties({ textures = { - "health_"..tostring(hp)..".png^".. - "breath_"..tostring(breath)..".png" + "health_"..hp..".png^".. + "breath_"..breath..".png" } }) self.hp = hp @@ -46,13 +64,6 @@ minetest.register_entity("gauges:hp_bar", { end }) -local function add_gauge(player) - local entity = minetest.add_entity(player:get_pos(), "gauges:hp_bar") - - entity:set_attach(player, "", {x=0, y=19, z=0}, {x=0, y=0, z=0}) - entity:get_luaentity().wielder = player -end - minetest.register_on_joinplayer(function(player) minetest.after(1, add_gauge, player) end) diff --git a/mod.conf b/mod.conf index 0f886a6..4a00f68 100644 --- a/mod.conf +++ b/mod.conf @@ -1,2 +1,3 @@ name = gauges description = Adds health and breath gauges above players. +min_minetest_version = 0.4.17