package tc.oc.pgm.renewable;
import org.bukkit.block.BlockState;
import org.bukkit.material.MaterialData;
import tc.oc.pgm.filters.Filter;
import tc.oc.pgm.filters.query.BlockQuery;
import tc.oc.pgm.regions.Region;
public class RenewableDefinition {
public Region region;
public Filter renewableBlocks;
public Filter replaceableBlocks;
public Filter shuffleableBlocks;
public float renewalsPerSecond; // Blocks per second
public boolean rateScaled; // Renewal rate is per-volume
public boolean growAdjacent;
public boolean particles;
public boolean sound;
public double avoidPlayersRange;
public boolean isShuffleable(BlockState block) {
return region.contains(block) && shuffleableBlocks.query(new BlockQuery(block)).isAllowed();
}
public boolean isReplaceable(BlockState block) {
return region.contains(block) && replaceableBlocks.query(new BlockQuery(block)).isAllowed();
}
public boolean canRenew(BlockState original, BlockState current) {
// Original block must be in the region and match the renewable filter
if(!region.contains(original)) return false;
BlockQuery originalQuery = new BlockQuery(original);
if(!renewableBlocks.query(originalQuery).isAllowed()) return false;
MaterialData originalMaterial = original.getMaterialData();
MaterialData currentMaterial = current.getMaterialData();
// If current material matches the original, block is already renewed
if(originalMaterial.equals(currentMaterial)) return false;
// If the original and current blocks are both shuffleable, block is already renewed
if(shuffleableBlocks.query(originalQuery).isAllowed() && shuffleableBlocks.query(new BlockQuery(current)).isAllowed()) {
return false;
}
// Otherwise, block is eligible to be renewed
return true;
}
}