@Override
    public void update() {
        RenderableBlock rb = workspace.getEnv().getRenderableBlock(getBlockID());

        if (rb != null) {
            int x = 5;
            int y = 7;

            if (rb.getBlock().isCommandBlock()) {
                y -= 2;
                x -= 3;
            }

            if (rb.getBlock().isDataBlock() || rb.getBlock().isFunctionBlock()) {
                x += 6;
                y -= 2;
            }

            if (rb.getBlock().isInfix() && rb.getBlock().getSocketAt(0) != null) {
                if (!rb.getBlock().getSocketAt(0).hasBlock()) {
                    x += 30;
                } else {
                    if (rb.getSocketSpaceDimension(rb.getBlock().getSocketAt(0)) != null) {
                        x += rb.getSocketSpaceDimension(rb.getBlock().getSocketAt(0)).width + 2;
                    }
                }
                y += 2;
                x += 1;
            }


            x = rb.rescale(x);
            y = rb.rescale(y);

            setLocation(x, y);
            setSize(rb.rescale(14), rb.rescale(14));

            if (isActive()) {
                setText("?");
                this.setForeground(new Color(255, 255, 0));
            } else {
                setText("?");
                this.setForeground(Color.lightGray);
            }
            rb.setComponentZOrder(this, 0);
        }
    }