Disable mining on low stamina

I want to make it so when the stamina is low, mining is disabled
robloxapp-20231108-1655521.wmv (1.1 MB)
I already made the stamina and mining system, here’s the scripts :

local pickaxe = script.Parent
local canmine = pickaxe.CanMine
local anim = pickaxe.Animation
local players = game:GetService("Players")
local player = players:GetPlayerFromCharacter(pickaxe.Parent) -- get player if tool is equipped
local character
local animtrack
local humanoid
local ismining = false
local isactive = false
local animplaying = false
local pickaxehitbox = pickaxe.Pickaxepart.PickaxeHitbox
local mining = game:GetService("ReplicatedStorage").Mining
local sc = game:GetService("ReplicatedStorage").ServerConnector
local pickvalue = game:GetService("ReplicatedStorage").Tool.CurrentPickaxe
local playermod = require(game:GetService("Players").LocalPlayer.PlayerScripts:WaitForChild("PlayerModule"))
local controls = playermod:GetControls()
local dc2 = game:GetService("ReplicatedStorage").dc2
local cs = game:GetService("ReplicatedStorage").ChangeStrength
local sb = game:GetService("ReplicatedStorage").StaminaBar
local zerostamina = game:GetService("ReplicatedStorage").zerostamina
local stamina = true

if pickaxe.Parent:IsA("Backpack") then -- checks if tool is in backpack
	player = pickaxe.Parent.Parent -- since backpack is always a child of a player, we get player from the backpack's parent
end

local function CharAdded(char)
	character = char
	humanoid = character:WaitForChild("Humanoid")
	animtrack = humanoid:LoadAnimation(anim)
end

if player.Character then CharAdded(player.Character) end
player.CharacterAdded:Connect(CharAdded)

canmine.Value = true	

pickaxe.Activated:Connect(function()
	if canmine.Value == true and animplaying == false then
		dc2:FireServer()
		print("activated")
		isactive = true
		animtrack:Play()
		canmine.Value = false
		animplaying = true
		wait(3)
		animplaying = false
		pickaxehitbox.Touched:Connect(function(hit)
			if ismining == false then
				if hit.Name == "Hitbox" or hit.Parent == "Rock" then
					print("mining")
					sb:FireServer()
					sc:FireServer()
					mining:FireServer()
					ismining = true
					local particle = hit:WaitForChild("ParticleEmitter")
					particle.Enabled = true
					if ismining == true then
						wait(1)
						ismining = false
						particle.Enabled = false
					end
				end
			end
		end)
		task.wait(1)
		canmine.Value = true
	end
end)

if isactive == true then
	wait(1)
	isactive = false
end
local rs = game:GetService("ReplicatedStorage")
local canmine = rs.Tool.Pickaxe.CanMine or rs.Tool.UpgradedPickaxe.CanMine
local mining = rs.Mining

local UIS = game:GetService("UserInputService")

local currentStamina = 250
local maxStamina = 250
local isRunning = false
local reqstamina = 50
local canmine = rs.Tool.Pickaxe.CanMine
local canminevalue = canmine.Value

currentStamina = math.clamp(currentStamina, 0, maxStamina)

local function updateStamina(player)
	if currentStamina > 0 then
		currentStamina = currentStamina - reqstamina
		script.Parent:TweenSize(UDim2.new(0, 20, currentStamina / maxStamina, 0), "Out", "Linear", 0.5)
	end
	task.wait(0.5)
	while true do
		if currentStamina <= 250 then
			currentStamina = currentStamina + 0.02
			script.Parent:TweenSize(UDim2.new(0, 20, currentStamina / maxStamina, 0), "Out", "Linear", 0)
		elseif currentStamina == 250 then
			print("User's Stamina is Full")
		elseif currentStamina < 50 then
			print("not enough stamina")
		elseif currentStamina > 50 then
			return
		end
		task.wait()
	end
end

mining.OnServerEvent:Connect(function(player)
	updateStamina()
end)

You can just check if stamina is lower than requirement stamina

if currentStamina - reqstamina >= 0 then -- stop if stamina after mining is below 0
		currentStamina = currentStamina - reqstamina
		script.Parent:TweenSize(UDim2.new(0, 20, currentStamina / maxStamina, 0), "Out", "Linear", 0.5)
	end

Where you have the elseif statement in the second script for checking how much stamina the player has send a remote event to the other script with a variable that say if the player can or can’t mine. In the other script you receive this and as said in the code check if it’s true or false.

local rs = game:GetService("ReplicatedStorage")
local canmine = rs.Tool.Pickaxe.CanMine or rs.Tool.UpgradedPickaxe.CanMine
local mining = rs.Mining
local disablemining = rs.DisableMining

local UIS = game:GetService("UserInputService")

local currentStamina = 250
local maxStamina = 250
local isRunning = false
local reqstamina = 50
local canmine = rs.Tool.Pickaxe.CanMine
local canminevalue = canmine.Value

currentStamina = math.clamp(currentStamina, 0, maxStamina)

local function updateStamina(player)
	if currentStamina > 0 then
		currentStamina = currentStamina - reqstamina
		script.Parent:TweenSize(UDim2.new(0, 20, currentStamina / maxStamina, 0), "Out", "Linear", 0.5)
	end
	task.wait(0.5)
	while true do
		if currentStamina <= 250 then
			currentStamina = currentStamina + 0.02
			script.Parent:TweenSize(UDim2.new(0, 20, currentStamina / maxStamina, 0), "Out", "Linear", 0)
		elseif currentStamina == 250 then
			print("User's Stamina is Full")
		elseif currentStamina - reqstamina >= 0 then -- stop if stamina after mining is below 0
			currentStamina = currentStamina - reqstamina
			script.Parent:TweenSize(UDim2.new(0, 20, currentStamina / maxStamina, 0), "Out", "Linear", 0.5)
			disablemining:FireClient(player)
		elseif currentStamina > 50 then
			return
		end
		task.wait()
	end
end

mining.OnServerEvent:Connect(function(player)
	updateStamina()
end)
local pickaxe = script.Parent
local canmine = pickaxe.CanMine
local anim = pickaxe.Animation
local players = game:GetService("Players")
local player = players:GetPlayerFromCharacter(pickaxe.Parent) -- get player if tool is equipped
local character
local animtrack
local humanoid
local ismining = false
local isactive = false
local animplaying = false
local pickaxehitbox = pickaxe.Pickaxepart.PickaxeHitbox
local mining = game:GetService("ReplicatedStorage").Mining
local sc = game:GetService("ReplicatedStorage").ServerConnector
local pickvalue = game:GetService("ReplicatedStorage").Tool.CurrentPickaxe
local playermod = require(game:GetService("Players").LocalPlayer.PlayerScripts:WaitForChild("PlayerModule"))
local controls = playermod:GetControls()
local dc2 = game:GetService("ReplicatedStorage").dc2
local cs = game:GetService("ReplicatedStorage").ChangeStrength
local sb = game:GetService("ReplicatedStorage").StaminaBar
local zerostamina = game:GetService("ReplicatedStorage").zerostamina
local stamina = true
local disablemining = game:GetService("ReplicatedStorage").DisableMining
local enoughstamina = true

disablemining.OnClientEvent:Connect(function()
	enoughstamina = false
end)

if pickaxe.Parent:IsA("Backpack") then -- checks if tool is in backpack
	player = pickaxe.Parent.Parent -- since backpack is always a child of a player, we get player from the backpack's parent
end

local function CharAdded(char)
	character = char
	humanoid = character:WaitForChild("Humanoid")
	animtrack = humanoid:LoadAnimation(anim)
end

if player.Character then CharAdded(player.Character) end	
player.CharacterAdded:Connect(CharAdded)

canmine.Value = true	

pickaxe.Activated:Connect(function()
	if canmine.Value == true and animplaying == false and enoughstamina then
		dc2:FireServer()
		print("activated")
		isactive = true
		animtrack:Play()
		canmine.Value = false
		animplaying = true
		wait(3)
		animplaying = false
		pickaxehitbox.Touched:Connect(function(hit)
			if ismining == false then
				if hit.Name == "Hitbox" or hit.Parent == "Rock" then
					print("mining")
					sb:FireServer()
					sc:FireServer()
					mining:FireServer()
					ismining = true
					local particle = hit:WaitForChild("ParticleEmitter")
					particle.Enabled = true
					if ismining == true then
						wait(1)
						ismining = false
						particle.Enabled = false
					end
				end
			end
		end)
		task.wait(1)
		canmine.Value = true
	end
end)

if isactive == true then
	wait(1)
	isactive = false
end

i added a remote event when the stamina is low but it doesn’t seem to work
robloxapp-20231108-1944567.wmv (2.2 MB)

Change the enoughstamina variable to canmine as you already are checking if the player can mine using that variable.

i made all these changes :

local rs = game:GetService("ReplicatedStorage")
local canmine = rs.Tool.Pickaxe.CanMine or rs.Tool.UpgradedPickaxe.CanMine
local mining = rs.Mining
local disablemining = rs.DisableMining

local UIS = game:GetService("UserInputService")

local currentStamina = 250
local maxStamina = 250
local isRunning = false
local reqstamina = 50
local canmine = rs.Tool.Pickaxe.CanMine
local canminevalue = canmine.Value

currentStamina = math.clamp(currentStamina, 0, maxStamina)

local function updateStamina(player)
	if currentStamina > 0 then
		currentStamina = currentStamina - reqstamina
		script.Parent:TweenSize(UDim2.new(0, 20, currentStamina / maxStamina, 0), "Out", "Linear", 0.5)
	end
	task.wait(0.5)
	while true do
		if currentStamina <= 250 then
			currentStamina = currentStamina + 0.02
			script.Parent:TweenSize(UDim2.new(0, 20, currentStamina / maxStamina, 0), "Out", "Linear", 0)
		elseif currentStamina == 250 then
			print("User's Stamina is Full")
		elseif currentStamina - reqstamina >= 0 or currentStamina <= reqstamina then -- stop if stamina after mining is below 0
			currentStamina = currentStamina - reqstamina
			script.Parent:TweenSize(UDim2.new(0, 20, currentStamina / maxStamina, 0), "Out", "Linear", 0.5)
			print("low stamina")
			disablemining:FireClient(player)
		elseif currentStamina > 50 then
			return
		end
		task.wait()
	end
end

mining.OnServerEvent:Connect(function(player)
	updateStamina()
end)

and

local pickaxe = script.Parent
local canmine = pickaxe.CanMine
local anim = pickaxe.Animation
local players = game:GetService("Players")
local player = players:GetPlayerFromCharacter(pickaxe.Parent) -- get player if tool is equipped
local character
local animtrack
local humanoid
local ismining = false
local isactive = false
local animplaying = false
local pickaxehitbox = pickaxe.Pickaxepart.PickaxeHitbox
local mining = game:GetService("ReplicatedStorage").Mining
local sc = game:GetService("ReplicatedStorage").ServerConnector
local pickvalue = game:GetService("ReplicatedStorage").Tool.CurrentPickaxe
local playermod = require(game:GetService("Players").LocalPlayer.PlayerScripts:WaitForChild("PlayerModule"))
local controls = playermod:GetControls()
local dc2 = game:GetService("ReplicatedStorage").dc2
local cs = game:GetService("ReplicatedStorage").ChangeStrength
local sb = game:GetService("ReplicatedStorage").StaminaBar
local zerostamina = game:GetService("ReplicatedStorage").zerostamina
local stamina = true
local disablemining = game:GetService("ReplicatedStorage").DisableMining
local cd = false

disablemining.OnClientEvent:Connect(function()
	canmine.Value = false
	cd = true
	print("wut de hell")
end)

if pickaxe.Parent:IsA("Backpack") then -- checks if tool is in backpack
	player = pickaxe.Parent.Parent -- since backpack is always a child of a player, we get player from the backpack's parent
end

local function CharAdded(char)
	character = char
	humanoid = character:WaitForChild("Humanoid")
	animtrack = humanoid:LoadAnimation(anim)
end

if player.Character then CharAdded(player.Character) end	
player.CharacterAdded:Connect(CharAdded)


pickaxe.Activated:Connect(function()
	if canmine.Value == true and animplaying == false then
		dc2:FireServer()
		print("activated")
		isactive = true
		animtrack:Play()
		canmine.Value = false
		animplaying = true
		wait(3)
		animplaying = false
		pickaxehitbox.Touched:Connect(function(hit)
			if ismining == false then
				if hit.Name == "Hitbox" or hit.Parent == "Rock" then
					print("mining")
					sb:FireServer()
					sc:FireServer()
					mining:FireServer()
					ismining = true
					local particle = hit:WaitForChild("ParticleEmitter")
					particle.Enabled = true
					if ismining == true then
						wait(1)
						ismining = false
						particle.Enabled = false
					end
				end
			end
			task.wait(1)
			if cd == false then
				print("no cd")
				canmine.Value = true
			end
		end)
	end
end)

if isactive == true then
	wait(1)
	isactive = false
end

but it still wont work