package net.minecraft.util.thread;

public abstract class IAsyncTaskHandlerReentrant<R extends Runnable> extends IAsyncTaskHandler<R> {

    private int depth;

    public IAsyncTaskHandlerReentrant(String s) {
        super(s);
    }

    @Override
    protected boolean isNotMainThread() {
        return this.isEntered() || super.isNotMainThread();
    }

    protected boolean isEntered() {
        return this.depth != 0;
    }

    @Override
    protected void executeTask(R r0) {
        ++this.depth;

        try {
            super.executeTask(r0);
        } finally {
            --this.depth;
        }

    }
}
