From c9a7bb70f169ddaf9c88b7c208b901511c60abbb Mon Sep 17 00:00:00 2001
From: sys4 <bricassa@sys4.fr>
Date: Sun, 20 Apr 2025 13:27:54 +0200
Subject: [PATCH] Increase physics_speed on leather and blackmithril armors

And fix crash if player is wearing these armors when joining session.
---
 init.lua | 52 +++++++++++++++++++++++++++++++---------------------
 1 file changed, 31 insertions(+), 21 deletions(-)

diff --git a/init.lua b/init.lua
index 7c279f2..24b9a75 100644
--- a/init.lua
+++ b/init.lua
@@ -32,15 +32,17 @@ end
 local mod_hbsprint = minetest.get_modpath("hbsprint") ~= nil
 local function change_stamina_max(player, value)
 	if mod_hbsprint then
-		local new_max = value + hb.get_hudtable("stamina").hudstate[player:get_player_name()].max
-		local val = player:get_meta():get_float("hbsprint:stamina")
-		if val > new_max then
-			player:get_meta():set_float("hbsprint:stamina", new_max)
-			hb.change_hudbar(player, "stamina", new_max, new_max)
-		elseif val <= new_max then
-			hb.unhide_hudbar(player, "stamina")
-			hb.change_hudbar(player, "stamina", nil, new_max)
-		end
+		core.after(0.5, function()
+			local new_max = value + hb.get_hudtable("stamina").hudstate[player:get_player_name()].max
+			local val = player:get_meta():get_float("hbsprint:stamina")
+			if val > new_max then
+				player:get_meta():set_float("hbsprint:stamina", new_max)
+				hb.change_hudbar(player, "stamina", new_max, new_max)
+			elseif val <= new_max then
+				hb.unhide_hudbar(player, "stamina")
+				hb.change_hudbar(player, "stamina", nil, new_max)
+			end
+		end)
 	end
 end
 
@@ -79,7 +81,7 @@ if armor.materials.reinforcedleather then
 	armor:register_armor(":3d_armor:helmet_reinforcedleather", {
 			description = S("Reinforced Leather Helmet (@1)", S("Hunter")),
 			inventory_image = "3d_armor_inv_helmet_reinforcedleather.png",
-			groups = {armor_head=1, armor_use=40, physics_speed=0.02, physics_gravity=-0.02},
+			groups = {armor_head=1, armor_use=40, physics_speed=0.4, physics_gravity=-0.02},
 			armor_groups = {fleshy=6},
 			damage_groups = {cracky=2, snappy=1, choppy=1, level=2},
 			on_equip = function(player, index, stack)
@@ -94,7 +96,7 @@ if armor.materials.reinforcedleather then
 	armor:register_armor(":3d_armor:chestplate_reinforcedleather", {
 		description = S("Reinforced Leather Chestplate (@1)", S("Hunter")),
 		inventory_image = "3d_armor_inv_chestplate_reinforcedleather.png",
-		groups = {armor_torso = 1, armor_use = 40, physics_speed=0.08, physics_gravity=-0.08},
+		groups = {armor_torso = 1, armor_use = 40, physics_speed=1.6, physics_gravity=-0.08},
 		armor_groups = {fleshy=11},
 		damage_groups = {cracky=2, snappy=1, choppy=1, level=2},
 		on_equip = function(player, index, stack)
@@ -110,7 +112,7 @@ if armor.materials.reinforcedleather then
 	armor:register_armor(":3d_armor:leggings_reinforcedleather", {
 		description = S("Reinforced Leather Leggings (@1)", S("Hunter")),
 		inventory_image = "3d_armor_inv_leggings_reinforcedleather.png",
-		groups = {armor_legs = 1, armor_use = 40, physics_speed=0.06, physics_gravity=-0.06},
+		groups = {armor_legs = 1, armor_use = 40, physics_speed=1.2, physics_gravity=-0.06},
 		armor_groups = {fleshy=11},
 		damage_groups = {cracky=2, snappy=1, choppy=1, level=2},
 		on_equip = function(player, index, stack)
@@ -125,7 +127,7 @@ if armor.materials.reinforcedleather then
 	armor:register_armor(":3d_armor:boots_reinforcedleather", {
 		description = S("Reinforced Leather Boots (@1)", S("Hunter")),
 		inventory_image = "3d_armor_inv_boots_reinforcedleather.png",
-		groups = {armor_feet = 1, armor_use = 40, physics_speed=0.02, physics_gravity=-0.02},
+		groups = {armor_feet = 1, armor_use = 40, physics_speed=0.4, physics_gravity=-0.02},
 		armor_groups = {fleshy=6},
 		damage_groups = {cracky=2, snappy=1, choppy=1, level=3},
 		on_equip = function(player, index, stack)
@@ -159,7 +161,7 @@ if armor.materials.hardenedleather then
 	armor:register_armor(":3d_armor:helmet_hardenedleather", {
 		description = S("Hardened Leather Helmet (@1)", S("Hunter")),
 		inventory_image = "3d_armor_inv_helmet_hardenedleather.png",
-		groups = {armor_head = 1, armor_use = 250, physics_speed=0.01, physics_gravity=-0.01},
+		groups = {armor_head = 1, armor_use = 250, physics_speed=0.2, physics_gravity=-0.01},
 		armor_groups = {fleshy=5},
 		damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=2},
 		on_equip = function(player, index, stack)
@@ -174,7 +176,7 @@ if armor.materials.hardenedleather then
 	armor:register_armor(":3d_armor:chestplate_hardenedleather", {
 		description = S("Hardened Leather Chestplate (@1)", S("Hunter")),
 		inventory_image = "3d_armor_inv_chestplate_hardenedleather.png",
-		groups = {armor_torso = 1, armor_use = 250, physics_speed=0.04, physics_gravity=-0.04},
+		groups = {armor_torso = 1, armor_use = 250, physics_speed=0.8, physics_gravity=-0.04},
 		armor_groups = {fleshy=8},
 		damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=2},
 		on_equip = function(player, index, stack)
@@ -189,7 +191,7 @@ if armor.materials.hardenedleather then
 	armor:register_armor(":3d_armor:leggings_hardenedleather", {
 		description = S("Hardened Leather Leggings (@1)", S("Hunter")),
 		inventory_image = "3d_armor_inv_leggings_hardenedleather.png",
-		groups = {armor_legs = 1, armor_use = 250, physics_speed=0.03, physics_gravity=-0.03},
+		groups = {armor_legs = 1, armor_use = 250, physics_speed=0.6, physics_gravity=-0.03},
 		armor_groups = {fleshy=8},
 		damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=2},
 		on_equip = function(player, index, stack)
@@ -204,7 +206,7 @@ if armor.materials.hardenedleather then
 	armor:register_armor(":3d_armor:boots_hardenedleather", {
 		description = S("Hardened Leather Boots (@1)", S("Hunter")),
 		inventory_image = "3d_armor_inv_boots_hardenedleather.png",
-		groups = {armor_feet = 1, armor_use = 250, physics_speed=0.01, physics_gravity=-0.01},
+		groups = {armor_feet = 1, armor_use = 250, physics_speed=0.2, physics_gravity=-0.01},
 		armor_groups = {fleshy=5},
 		damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=2},
 		on_equip = function(player, index, stack)
@@ -238,14 +240,16 @@ if armor.materials.blackmithril then
 	armor:register_armor(":3d_armor:helmet_blackmithril", {
 		description = S("Black Mithril Helmet (@1)", S("Warrior")),
 		inventory_image = "3d_armor_inv_helmet_blackmithril.png",
-		groups = {armor_head = 1, armor_heal = 15, armor_use = 40},
+		groups = {armor_head = 1, armor_heal = 15, physics_speed=0.2, armor_use = 40},
 		armor_groups = {fleshy=16},
 		damage_groups = {cracky=2, snappy=1, level=3},
 		on_equip = function(player, index, stack)
 			change_hp_max(player, 1)
+			change_stamina_max(player, 1)
 		end,
 		on_unequip = function(player, index, stack)
 			change_hp_max(player, -1)
+			change_stamina_max(player, -1)
 		end,
 	})
 
@@ -253,14 +257,16 @@ if armor.materials.blackmithril then
 	armor:register_armor(":3d_armor:chestplate_blackmithril", {
 		description = S("Black Mithril Chestplate (@1)", S("Warrior")),
 		inventory_image = "3d_armor_inv_chestplate_blackmithril.png",
-		groups = {armor_torso = 1, armor_heal = 15, armor_use = 40},
+		groups = {armor_torso = 1, armor_heal = 15, physics_speed=0.8, armor_use = 40},
 		armor_groups = {fleshy=22},
 		damage_groups = {cracky=2, snappy=1, level=3},
 		on_equip = function(player, index, stack)
 			change_hp_max(player, 5)
+			change_stamina_max(player, 4)
 		end,
 		on_unequip = function(player, index, stack)
 			change_hp_max(player, -5)
+			change_stamina_max(player, -4)
 		end,
 	})
 
@@ -268,14 +274,16 @@ if armor.materials.blackmithril then
 	armor:register_armor(":3d_armor:leggings_blackmithril", {
 		description = S("Black Mithril Leggings (@1)", S("Warrior")),
 		inventory_image = "3d_armor_inv_leggings_blackmithril.png",
-		groups = {armor_legs = 1, armor_heal = 15, armor_use = 40},
+		groups = {armor_legs = 1, armor_heal = 15, physics_speed = 0.6, armor_use = 40},
 		armor_groups = {fleshy=22},
 		damage_groups = {cracky=2, snappy=1, level=3},
 		on_equip = function(player, index, stack)
 			change_hp_max(player, 3)
+			change_stamina_max(player, 3)
 		end,
 		on_unequip = function(player, index, stack)
 			change_hp_max(player, -3)
+			change_stamina_max(player, -3)
 		end,
 	})
 
@@ -283,14 +291,16 @@ if armor.materials.blackmithril then
 	armor:register_armor(":3d_armor:boots_blackmithril", {
 		description = S("Black Mithril Boots (@1)", S("Warrior")),
 		inventory_image = "3d_armor_inv_boots_blackmithril.png",
-		groups = {armor_feet = 1, armor_heal = 15, armor_use = 40},
+		groups = {armor_feet = 1, armor_heal = 15, physics_speed = 0.2, armor_use = 40},
 		armor_groups = {fleshy=16},
 		damage_groups = {cracky=2, snappy=1, level=3},
 		on_equip = function(player, index, stack)
 			change_hp_max(player, 1)
+			change_stamina_max(player, 1)
 		end,
 		on_unequip = function(player, index, stack)
 			change_hp_max(player, -1)
+			change_stamina_max(player, -1)
 		end,
 	})