Here is a selection of my open-source projects. All the code lives on GitHub — take a look, clone it or open it for inspiration.

Minecraft Plugins

Three Paper 1.21 server plugins: a central lobby, a co-op roguelike maze (MazeRunner) and a SkyBlock with economy (SkyIslands).

  • Java 21
  • Paper 1.21
  • Gradle
  • SQLite

Only Games

A collection of arcade mini-games playable in the browser (Snake, Maze, Tanks) with local multiplayer for up to 4 players.

  • Next.js 16
  • React 19
  • TypeScript
  • Tailwind

A peek at the code

Funnily enough, both projects share the same maze-generation algorithm —recursive backtracking— but in different languages. Same idea, two worlds:

Only Games — maze in TypeScript

ts
// Recursive backtracking: carve a perfect maze
function carvePassage(maze: Maze, x: number, y: number, visited: boolean[][]) {
  visited[y][x] = true;
  for (const dir of shuffleArray(DIRECTIONS)) {
    const nx = x + DX[dir];
    const ny = y + DY[dir];
    if (isValidCell(nx, ny, width, height) && !visited[ny][nx]) {
      maze[y][x].walls[dir] = false;
      maze[ny][nx].walls[OPPOSITE[dir]] = false;
      carvePassage(maze, nx, ny, visited);
    }
  }
}

MazeRunner — maze in Java

java
// Recursive backtracking (iterative DFS to avoid a stack overflow)
public MazeGrid generate(int width, int height) {
    MazeGrid grid = new MazeGrid(width, height);
    boolean[][] visited = new boolean[width][height];
    Deque<int[]> stack = new ArrayDeque<>();
    stack.push(new int[]{0, 0});
    visited[0][0] = true;

    while (!stack.isEmpty()) {
        int[] cur = stack.peek();
        List<int[]> neighbors = unvisitedNeighbors(cur, visited);
        if (neighbors.isEmpty()) {
            stack.pop();
        } else {
            int[] next = neighbors.get(random.nextInt(neighbors.size()));
            grid.openWall(cur[0], cur[1], next[0], next[1]);
            visited[next[0]][next[1]] = true;
            stack.push(next);
        }
    }
    return grid;
}

Want to see more? All my open-source code is on my GitHub profile.