Help with a "private" bool ?

So, in my game, the players can collect power ups that do various things, the one I have to focus here is the one that increases/decreases the player scale. The players are not restrained in the z axis, so for them to stay standing still, I attached a spring joint, and if they are in a certain angle and in the same y position that they got when they are standing still (around 2.6 in the case), the spring joint is activated, if they jump (go past by the 2.6 y) or stay leaning too hard, the spring joint is deactivated.
But as you may think, when the player gets the scale up powerup, the standing y position increases (around 3.1).

So to fix that, I created a public bool that turns true when the player gets the power up, and In the script responsible for the spring joint, if the bool is true, the spring joint only gets activated if the player y pos is under 3.1.
PROBLEM IS HERE IN CASE YOU DONT WANNA READ ALL THAT: All fine until now, right? But the issue is, as the boolean is public (and afaik it has to be, because the powerup script makes the boolean true when the player gets the powerup, so it has to access it by being the bool public) and I have 2 players, both sharing the spring joint script, if one player collects the powerup, both of them will have the isGiant bool = true. Making both only activate the spring joint if the y is under 3.1 as if both were turned into “giants”. How can I make the bool private in the sense isGiant = true only for the player that collected the powerup, but still have it public so the powerup script can access the bool and change its value? Springjoint script:

public class JumpPlayer : MonoBehaviour {

    Collider2D playerCollider;
    private Rigidbody2D rbody;
    Collider2D childCol;
    public GameObject legObj;
    public float JumpPower = 15;

    public KeyCode jumpKick;

    public bool isGiant = false;
    public bool isMini = false;

	// Use this for initialization
	void Start () {
        playerCollider = GetComponent<Collider2D>();
        childCol = legObj.GetComponent<Collider2D>();
        rbody = GetComponent<Rigidbody2D>();
        print(childCol.gameObject.name);
	}

    // Update is called once per frame
    void Update() {

        Jump();
        if (isGiant ==true && transform.position.y >= 3.3  || transform.eulerAngles.z >= 100 && transform.eulerAngles.z <= 270) {
            GetComponent<SpringJoint2D>().enabled = false;
        }

        if (!isGiant && !isMini && transform.position.y >= 2.6  || transform.eulerAngles.z >= 100 && transform.eulerAngles.z <= 270) {
            GetComponent<SpringJoint2D>().enabled = false;
        }
        else {
            GetComponent<SpringJoint2D>().enabled = true;
        }
        if (rbody.velocity.x >= 4 && transform.position.y >= 2.6) {
            rbody.angularVelocity = 5;
        }
        print(isGiant); //debugging
    }

    public void Jump () {

        if (!playerCollider.IsTouchingLayers(LayerMask.GetMask("Ground")))  {

            GetComponent<SpringJoint2D>().enabled = false;
            return;
        }

        if (Input.GetKeyDown(jumpKick)) {
            rbody.AddForce(transform.up * JumpPower, ForceMode2D.Impulse);
            Vector2 random = new Vector2 (Random.Range(0f, 1.5f), Random.Range (0f, 2f));
            rbody.velocity += random;
        }
        }
}

Wait, what? No, it will not be true for both players. Unless you are setting it in some messed up way, but from this code only it is not the case. Show us how you set the bool, because the mistake is probably there.

Also a sanity check question: each player has a seperate instance of this script attached to it, right?