There’s a solid core of a game fighting to break through here, but the execution is frustrating enough that I unfortunately wasn’t able to make much progress. I think I understand how you’re supposed to play - bring upgrade cubes back to increase your max life, then use that life to explore further and repeat - but the amount of mashing and waiting required took the fun out of it for me. Exploring is the fun part of the game, but taking risks to do it is heavily disincentivized, since running out of life causes you to lose all your progress, and starting again requires a large time commitment. I had one decent attempt where I got up to 30 life, then just barely ran out of life running back to the button after unlocking a door. It had taken several minutes of standing on the life button spamming E while waiting for the upgrade button to recharge to get that far, and I just didn’t have it in me to do all that again for another attempt. I get what the game is going for, I think, and I imagine it could be fun without the waiting, but as it is it feels like the game is preventing me from actually experiencing its intended game loop.
Of course, you should design your own game in the way you prefer, so take this with a grain of salt, but if I were to suggest how to make this a little nicer to the player: instead of a life button, there could just be a tile you stand on that automatically refills your life. Then, the upgrade button could consume an entire cube at once, rather than just a single segment of one. Just those two changes would make this game a far less frustrating experience, I think.
(Also, side note, but it’s impressive you didn’t use a game engine for this! I don’t see games written in Java often, either, so seeing this was is neat.)