Package net.aufdemrand.denizen.scripts.commands.entity

Source Code of net.aufdemrand.denizen.scripts.commands.entity.HealCommand

package net.aufdemrand.denizen.scripts.commands.entity;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import net.aufdemrand.denizen.BukkitScriptEntryData;
import net.aufdemrand.denizencore.exceptions.CommandExecutionException;
import net.aufdemrand.denizencore.exceptions.InvalidArgumentsException;
import net.aufdemrand.denizen.objects.Element;
import net.aufdemrand.denizen.objects.aH;
import net.aufdemrand.denizen.objects.dEntity;
import net.aufdemrand.denizen.objects.dList;
import net.aufdemrand.denizen.scripts.ScriptEntry;
import net.aufdemrand.denizen.scripts.commands.AbstractCommand;
import net.aufdemrand.denizen.utilities.debugging.dB;

/**
* Heals an entity.
*
* @author Jeremy Schroeder, Mason Adkins, Morphan1, mcmonkey
*/

public class HealCommand extends AbstractCommand {

    @Override
    public void parseArgs(ScriptEntry scriptEntry) throws InvalidArgumentsException {

        boolean specified_targets = false;

        for (aH.Argument arg : aH.interpret(scriptEntry.getArguments())) {

            if (!scriptEntry.hasObject("amount")
                    && arg.matchesPrimitive(aH.PrimitiveType.Double))
                scriptEntry.addObject("amount", arg.asElement());

            else if (!scriptEntry.hasObject("entities")
                    && arg.matchesArgumentType(dList.class)) {
                // Entity arg
                scriptEntry.addObject("entities", arg.asType(dList.class).filter(dEntity.class));
                specified_targets = true;
            }

            else if (!scriptEntry.hasObject("entities")
                    && arg.matchesArgumentType(dEntity.class)) {
                // Entity arg
                scriptEntry.addObject("entities", Arrays.asList(arg.asType(dEntity.class)));
                specified_targets = true;
            }

            else arg.reportUnhandled();
        }

        if (!scriptEntry.hasObject("amount"))
            scriptEntry.addObject("amount", new Element(-1));

        if (!specified_targets) {
            List<dEntity> entities = new ArrayList<dEntity>();
            if (((BukkitScriptEntryData)scriptEntry.entryData).getPlayer() != null)
                entities.add(((BukkitScriptEntryData)scriptEntry.entryData).getPlayer().getDenizenEntity());
            else if (((BukkitScriptEntryData)scriptEntry.entryData).getNPC() != null)
                entities.add(((BukkitScriptEntryData)scriptEntry.entryData).getNPC().getDenizenEntity());
            else
                throw new InvalidArgumentsException("No valid target entities found.");
            scriptEntry.addObject("entities", entities);
        }

    }

    @SuppressWarnings("unchecked")
    @Override
    public void execute(ScriptEntry scriptEntry) throws CommandExecutionException {

        List<dEntity> entities = (List<dEntity>) scriptEntry.getObject("entities");
        if (entities == null)
            return;
        Element amountelement = scriptEntry.getElement("amount");

        dB.report(scriptEntry, getName(), amountelement.debug() + aH.debugObj("entities", entities));
        if (amountelement.asDouble() == -1)
            for (dEntity entity : entities)
                entity.getLivingEntity().setHealth(entity.getLivingEntity().getMaxHealth());
        else {
            double amount = amountelement.asDouble();
            for (dEntity entity : entities)
                if (entity.getLivingEntity().getHealth() + amount < entity.getLivingEntity().getMaxHealth())
                    entity.getLivingEntity().setHealth(entity.getLivingEntity().getHealth() + amount);
                else
                    entity.getLivingEntity().setHealth(entity.getLivingEntity().getMaxHealth());
        }
    }
}
TOP

Related Classes of net.aufdemrand.denizen.scripts.commands.entity.HealCommand

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.