@EventHandler(priority = EventPriority.LOWEST)
    public void onBlockPlace(BlockPlaceEvent event) {

        Database db = new Database();

        // Get the block
        Block b = event.getBlock();

        Player p = event.getPlayer();
        int playerId;

        World w = b.getWorld();
        int worldId = 1;

        switch (w.getEnvironment()) {
            case NETHER:
                worldId = 2;
                break;
            case THE_END:
                worldId = 3;
                break;
        }

        if (playerIdCache.containsKey(p.getName())) {
            playerId = playerIdCache.get(p.getName());
        } else {
            playerId = db.getPlayerId(p.getName());
            playerIdCache.put(p.getName(), playerId);
        }

        int locationId = db.getLocationId(b.getX(), b.getY(), b.getZ(), worldId);

        LocationHistory locationHistory = new LocationHistory();

        locationHistory.setLocationId(locationId);
        locationHistory.setPlayerId(playerId);
        locationHistory.setActionTypeId(ActionTypes.PLACE.getValue());
        locationHistory.setTypeId(b.getTypeId());
        locationHistory.setData(b.getData());

        historyQueue.push(locationHistory);
        if (thread.getState() == Thread.State.WAITING) {
            LockSupport.unpark(thread);
        }
    }