// 
// Decompiled by Procyon v0.6.0
// 

package com.hypixel.hytale.server.spawning.jobs;

import com.hypixel.hytale.server.spawning.SpawningPlugin;
import javax.annotation.Nullable;
import com.hypixel.hytale.server.spawning.ISpawnableWithModel;
import javax.annotation.Nonnull;
import com.hypixel.hytale.server.spawning.SpawningContext;
import com.hypixel.hytale.logger.HytaleLogger;

public abstract class SpawnJob
{
    protected static final HytaleLogger LOGGER;
    private static int jobIdCounter;
    protected final int jobId;
    protected final SpawningContext spawningContext;
    protected int columnBudget;
    protected int budgetUsed;
    protected boolean terminated;
    
    public SpawnJob() {
        this.spawningContext = new SpawningContext();
        this.jobId = SpawnJob.jobIdCounter++;
    }
    
    public int getJobId() {
        return this.jobId;
    }
    
    public int getBudgetUsed() {
        return this.budgetUsed;
    }
    
    public void setBudgetUsed(final int budgetUsed) {
        this.budgetUsed = budgetUsed;
    }
    
    public int getColumnBudget() {
        return this.columnBudget;
    }
    
    public void setColumnBudget(final int columnBudget) {
        this.columnBudget = columnBudget;
    }
    
    @Nonnull
    public SpawningContext getSpawningContext() {
        return this.spawningContext;
    }
    
    protected void beginProbing() {
        this.reset();
        this.terminated = false;
    }
    
    public void reset() {
        this.spawningContext.releaseFull();
    }
    
    public boolean budgetAvailable() {
        return this.budgetUsed < this.columnBudget;
    }
    
    public boolean isTerminated() {
        return this.terminated;
    }
    
    public void setTerminated(final boolean terminated) {
        this.terminated = terminated;
    }
    
    @Nullable
    public abstract ISpawnableWithModel getSpawnable();
    
    public abstract boolean shouldTerminate();
    
    @Nullable
    public abstract String getSpawnableName();
    
    static {
        LOGGER = SpawningPlugin.get().getLogger();
    }
}
