I may have rewritten the entire source code since last post. Let me explain.
So I started restructuring the game based on stuff you've seen in previous post, and some small stuff you haven't. GUI was getting overcomplicated, so I started to pull different states into dedicated classes. Then it turned out pathfinding was coupled with almost everything, such that when I tried to move it from movement component to the game board everything broke. After I jumped from file to file adjusting little details I thought it'd be easier to just throw everything away and rewrite it from scratch.
Wasn't as bad an idea as it might seem. Of course, I didn't really throw everything out. I just started writing from scratch, taking parts of old code and fitting them where appropriate. And it's worked out okay so far, the only thing missing from this new version is movement. So fingers crossed, and please put all your comments about how stupid that was in the reddit discussion.
Also (who would have thought) GUI programming is hard! It seemed so much simpler at first. I mean, it's just a button, right? Well, a simple button drags with it enough stuff that I'm already considering putting GUI aside until later. Bu-u-ut I suppose there's no better time to figure it out than now. Although now that philosophy lectures have ended my productivity might decline.