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; } }