Search in sources :

Example 1 with BlockRecurse

use of com.elmakers.mine.bukkit.batch.BlockRecurse in project MagicPlugin by elBukkit.

the class RecurseSpell method onCast.

@Override
public SpellResult onCast(ConfigurationSection parameters) {
    Block targetBlock = getTargetBlock();
    if (targetBlock == null) {
        return SpellResult.NO_TARGET;
    }
    if (!hasBuildPermission(targetBlock)) {
        return SpellResult.INSUFFICIENT_PERMISSION;
    }
    if (!isDestructible(targetBlock)) {
        return SpellResult.NO_TARGET;
    }
    BlockRecurse blockRecurse = new BlockRecurse();
    int size = parameters.getInt("size", 8);
    size = (int) (mage.getRadiusMultiplier() * size);
    blockRecurse.setMaxRecursion(size);
    ModifyBlockAction action = new ModifyBlockAction();
    action.initialize(this, parameters);
    blockRecurse.addReplaceable(new MaterialAndData(targetBlock));
    Material targetMaterial = targetBlock.getType();
    // A bit hacky, but is very handy!
    if (targetMaterial == Material.STATIONARY_WATER || targetMaterial == Material.WATER) {
        for (byte i = 0; i < 9; i++) {
            blockRecurse.addReplaceable(Material.STATIONARY_WATER, i);
            blockRecurse.addReplaceable(Material.WATER, i);
        }
    } else if (targetMaterial == Material.STATIONARY_LAVA || targetMaterial == Material.LAVA) {
        for (byte i = 0; i < 9; i++) {
            blockRecurse.addReplaceable(Material.STATIONARY_LAVA, i);
            blockRecurse.addReplaceable(Material.LAVA, i);
        }
    } else if (targetMaterial == Material.SNOW) {
        for (byte i = 0; i < 8; i++) {
            blockRecurse.addReplaceable(Material.SNOW, i);
        }
    }
    CastContext context = getCurrentCast();
    context.setTargetLocation(targetBlock.getLocation());
    blockRecurse.recurse(new ActionContext(action, parameters), context);
    registerForUndo();
    controller.updateBlock(targetBlock);
    return SpellResult.CAST;
}
Also used : CastContext(com.elmakers.mine.bukkit.api.action.CastContext) BlockRecurse(com.elmakers.mine.bukkit.batch.BlockRecurse) MaterialAndData(com.elmakers.mine.bukkit.block.MaterialAndData) ModifyBlockAction(com.elmakers.mine.bukkit.action.builtin.ModifyBlockAction) Block(org.bukkit.block.Block) Material(org.bukkit.Material) ActionContext(com.elmakers.mine.bukkit.action.ActionContext)

Aggregations

ActionContext (com.elmakers.mine.bukkit.action.ActionContext)1 ModifyBlockAction (com.elmakers.mine.bukkit.action.builtin.ModifyBlockAction)1 CastContext (com.elmakers.mine.bukkit.api.action.CastContext)1 BlockRecurse (com.elmakers.mine.bukkit.batch.BlockRecurse)1 MaterialAndData (com.elmakers.mine.bukkit.block.MaterialAndData)1 Material (org.bukkit.Material)1 Block (org.bukkit.block.Block)1