Search in sources :

Example 51 with Mage

use of com.elmakers.mine.bukkit.api.magic.Mage in project MagicPlugin by elBukkit.

the class CycleEntityAction method perform.

@Override
public SpellResult perform(CastContext context) {
    Entity entity = context.getTargetEntity();
    EntityType entityType = entity.getType();
    Mage mage = context.getMage();
    switch(entityType) {
        case PAINTING:
            context.registerModified(entity);
            Painting painting = (Painting) entity;
            Art[] artValues = Art.values();
            Art oldArt = painting.getArt();
            Art newArt = oldArt;
            int ordinal = (oldArt.ordinal() + 1);
            for (int i = 0; i < artValues.length; i++) {
                newArt = artValues[ordinal++ % artValues.length];
                painting.setArt(newArt);
                newArt = painting.getArt();
                if (oldArt != newArt) {
                    break;
                }
            }
            if (oldArt == newArt) {
                return SpellResult.FAIL;
            }
            mage.sendDebugMessage("Altering art from " + oldArt + " to " + newArt);
            break;
        case ITEM_FRAME:
            ItemFrame itemFrame = (ItemFrame) entity;
            ItemStack frameItem = itemFrame.getItem();
            if (frameItem == null || frameItem.getType() != Material.MAP) {
                return SpellResult.NO_TARGET;
            }
            short data = frameItem.getDurability();
            data++;
            MapView mapView = DeprecatedUtils.getMap(data);
            if (mapView == null) {
                data = 0;
                mapView = DeprecatedUtils.getMap(data);
                if (mapView == null) {
                    return SpellResult.NO_TARGET;
                }
            }
            context.registerModified(entity);
            frameItem.setDurability(data);
            itemFrame.setItem(frameItem);
            break;
        case HORSE:
            context.registerModified(entity);
            Horse horse = (Horse) entity;
            Horse.Color color = horse.getColor();
            Horse.Color[] colorValues = Horse.Color.values();
            color = colorValues[(color.ordinal() + 1) % colorValues.length];
            Horse.Style horseStyle = horse.getStyle();
            Horse.Style[] styleValues = Horse.Style.values();
            horseStyle = styleValues[(horseStyle.ordinal() + 1) % styleValues.length];
            horse.setStyle(horseStyle);
            horse.setColor(color);
            break;
        case OCELOT:
            context.registerModified(entity);
            Ocelot ocelot = (Ocelot) entity;
            Ocelot.Type catType = ocelot.getCatType();
            Ocelot.Type[] typeValues = Ocelot.Type.values();
            catType = typeValues[(catType.ordinal() + 1) % typeValues.length];
            ocelot.setCatType(catType);
            break;
        case VILLAGER:
            context.registerModified(entity);
            Villager villager = (Villager) entity;
            Villager.Profession profession = villager.getProfession();
            Villager.Profession[] professionValues = Villager.Profession.values();
            int villagerOrdinal = (profession.ordinal() + 1) % professionValues.length;
            // Special-cases for zombie-reserved professions
            if (villagerOrdinal == 0 || villagerOrdinal == 7) {
                villagerOrdinal = 1;
            }
            profession = professionValues[villagerOrdinal];
            villager.setProfession(profession);
            break;
        case WOLF:
            context.registerModified(entity);
            Wolf wolf = (Wolf) entity;
            DyeColor wolfColor = wolf.getCollarColor();
            DyeColor[] wolfColorValues = DyeColor.values();
            wolfColor = wolfColorValues[(wolfColor.ordinal() + 1) % wolfColorValues.length];
            wolf.setCollarColor(wolfColor);
            break;
        case SHEEP:
            context.registerModified(entity);
            Sheep sheep = (Sheep) entity;
            DyeColor dyeColor = sheep.getColor();
            DyeColor[] dyeColorValues = DyeColor.values();
            dyeColor = dyeColorValues[(dyeColor.ordinal() + 1) % dyeColorValues.length];
            sheep.setColor(dyeColor);
            break;
        default:
            return SpellResult.NO_TARGET;
    }
    ;
    return SpellResult.CAST;
}
Also used : Entity(org.bukkit.entity.Entity) Art(org.bukkit.Art) ItemFrame(org.bukkit.entity.ItemFrame) Horse(org.bukkit.entity.Horse) Villager(org.bukkit.entity.Villager) MapView(org.bukkit.map.MapView) Wolf(org.bukkit.entity.Wolf) DyeColor(org.bukkit.DyeColor) DyeColor(org.bukkit.DyeColor) Painting(org.bukkit.entity.Painting) EntityType(org.bukkit.entity.EntityType) Ocelot(org.bukkit.entity.Ocelot) EntityType(org.bukkit.entity.EntityType) Mage(com.elmakers.mine.bukkit.api.magic.Mage) Sheep(org.bukkit.entity.Sheep) ItemStack(org.bukkit.inventory.ItemStack)

Example 52 with Mage

use of com.elmakers.mine.bukkit.api.magic.Mage in project MagicPlugin by elBukkit.

the class DebuggerAction method perform.

@Override
public SpellResult perform(CastContext context) {
    Entity entity = context.getTargetEntity();
    MageController controller = context.getController();
    Mage mage = null;
    if (entity != null && controller.isMage(entity)) {
        mage = controller.getMage(entity);
    } else {
        Block block = context.getTargetBlock();
        if (block.getType() == Material.COMMAND) {
            CommandBlock commandBlock = (CommandBlock) block.getState();
            // This is a bit of hacky ..
            String commandName = commandBlock.getName();
            String mageId = "COMMAND";
            if (commandName != null && commandName.length() > 0) {
                mageId = "COMMAND-" + commandBlock.getName();
            }
            mage = controller.getRegisteredMage(mageId);
        }
    }
    if (mage == null) {
        return SpellResult.NO_TARGET;
    }
    int currentLevel = mage.getDebugLevel();
    if (currentLevel == debugLevel || debugLevel == 0) {
        mage.setDebugLevel(0);
        mage.setDebugger(null);
        return SpellResult.DEACTIVATE;
    }
    mage.setDebugLevel(debugLevel);
    mage.setDebugger(context.getMage().getCommandSender());
    if (check) {
        mage.debugPermissions(context.getMage().getCommandSender(), null);
    }
    return SpellResult.CAST;
}
Also used : Entity(org.bukkit.entity.Entity) MageController(com.elmakers.mine.bukkit.api.magic.MageController) Mage(com.elmakers.mine.bukkit.api.magic.Mage) CommandBlock(org.bukkit.block.CommandBlock) Block(org.bukkit.block.Block) CommandBlock(org.bukkit.block.CommandBlock)

Example 53 with Mage

use of com.elmakers.mine.bukkit.api.magic.Mage in project MagicPlugin by elBukkit.

the class DisarmAction method perform.

@Override
public SpellResult perform(CastContext context) {
    Entity target = context.getTargetEntity();
    if (target == null || !(target instanceof LivingEntity)) {
        return SpellResult.NO_TARGET;
    }
    LivingEntity entity = (LivingEntity) target;
    EntityEquipment equipment = entity.getEquipment();
    ItemStack stack = null;
    Integer originalSlot = null;
    boolean isMainHand = false;
    if (displayName == null) {
        stack = equipment.getItemInMainHand();
        isMainHand = true;
    } else {
        // This is not compatible
        keepInInventory = false;
        // Must be a player in this case
        if (!(entity instanceof Player)) {
            return SpellResult.PLAYER_REQUIRED;
        }
        PlayerInventory playerInventory = ((Player) entity).getInventory();
        for (originalSlot = 0; originalSlot < playerInventory.getSize(); originalSlot++) {
            ItemStack item = playerInventory.getItem(originalSlot);
            if (InventoryUtils.isEmpty(item))
                continue;
            ItemMeta meta = item.getItemMeta();
            if (meta == null || !meta.hasDisplayName())
                continue;
            if (meta.getDisplayName().equals(displayName)) {
                stack = item;
                isMainHand = originalSlot == playerInventory.getHeldItemSlot();
                break;
            }
        }
    }
    if (InventoryUtils.isEmpty(stack)) {
        return SpellResult.NO_TARGET;
    }
    // Special case for wands
    MageController controller = context.getController();
    Mage targetMage = controller.getMage(entity);
    if (com.elmakers.mine.bukkit.wand.Wand.isWand(stack) && controller.isMage(entity)) {
        Mage mage = context.getMage();
        // This gets overridden by superpower...
        if (!mage.isSuperPowered() && targetMage.isSuperProtected()) {
            return SpellResult.NO_TARGET;
        }
        Wand activeWand = targetMage.getActiveWand();
        if (activeWand != null && isMainHand) {
            targetMage.getActiveWand().deactivate();
            stack = equipment.getItemInMainHand();
        }
    }
    Integer targetSlot = null;
    PlayerInventory targetInventory = null;
    ItemStack swapItem = null;
    Random random = context.getRandom();
    if (entity instanceof Player && keepInInventory) {
        Player targetPlayer = (Player) entity;
        targetInventory = targetPlayer.getInventory();
        originalSlot = targetInventory.getHeldItemSlot();
        List<Integer> validSlots = new ArrayList<>();
        ItemStack[] contents = targetInventory.getContents();
        for (int i = minSlot; i <= maxSlot; i++) {
            if (contents[i] == null || contents[i].getType() == Material.AIR) {
                validSlots.add(i);
            }
        }
        // Randomly choose a slot if no empty one was found
        if (validSlots.size() == 0) {
            int swapSlot = random.nextInt(maxSlot - minSlot) + minSlot;
            swapItem = targetInventory.getItem(swapSlot);
            validSlots.add(swapSlot);
        }
        int chosen = random.nextInt(validSlots.size());
        targetSlot = validSlots.get(chosen);
    }
    if (displayName != null) {
        ((Player) entity).getInventory().setItem(originalSlot, null);
    } else {
        equipment.setItemInMainHand(swapItem);
    }
    if (targetSlot != null && targetInventory != null) {
        targetInventory.setItem(targetSlot, stack);
        if (originalSlot != null) {
            DisarmUndoAction disarmUndo = new DisarmUndoAction(targetMage, originalSlot, targetSlot);
            context.registerForUndo(disarmUndo);
        }
    } else {
        Location location = entity.getLocation();
        location.setY(location.getY() + 1);
        Item item = entity.getWorld().dropItemNaturally(location, stack);
        Vector velocity = item.getVelocity();
        velocity.setY(velocity.getY() * 5);
        SafetyUtils.setVelocity(item, velocity);
    }
    return SpellResult.CAST;
}
Also used : Entity(org.bukkit.entity.Entity) LivingEntity(org.bukkit.entity.LivingEntity) Player(org.bukkit.entity.Player) ArrayList(java.util.ArrayList) Wand(com.elmakers.mine.bukkit.api.wand.Wand) PlayerInventory(org.bukkit.inventory.PlayerInventory) LivingEntity(org.bukkit.entity.LivingEntity) MageController(com.elmakers.mine.bukkit.api.magic.MageController) Item(org.bukkit.entity.Item) Random(java.util.Random) EntityEquipment(org.bukkit.inventory.EntityEquipment) Mage(com.elmakers.mine.bukkit.api.magic.Mage) ItemStack(org.bukkit.inventory.ItemStack) Vector(org.bukkit.util.Vector) ItemMeta(org.bukkit.inventory.meta.ItemMeta) Location(org.bukkit.Location)

Example 54 with Mage

use of com.elmakers.mine.bukkit.api.magic.Mage in project MagicPlugin by elBukkit.

the class EntitySelectAction method start.

@Override
public SpellResult start(CastContext context) {
    Mage mage = context.getMage();
    MageController controller = context.getController();
    Player player = mage.getPlayer();
    if (player == null) {
        return SpellResult.PLAYER_REQUIRED;
    }
    final Location location = context.getLocation();
    List<Entity> allEntities = new ArrayList<>(location.getWorld().getNearbyEntities(location, radius, radius, radius));
    entities.clear();
    Collections.sort(allEntities, new Comparator<Entity>() {

        @Override
        public int compare(Entity entity1, Entity entity2) {
            return Double.compare(location.distanceSquared(entity1.getLocation()), location.distanceSquared(entity2.getLocation()));
        }
    });
    int index = 0;
    for (Entity targetEntity : allEntities) {
        if (!context.getTargetsCaster() && targetEntity == player)
            continue;
        if (targetEntity instanceof LivingEntity && ((LivingEntity) targetEntity).hasPotionEffect(PotionEffectType.INVISIBILITY))
            continue;
        if (!context.canTarget(targetEntity))
            continue;
        entities.put(index++, new WeakReference<>(targetEntity));
        if (entities.size() >= limit)
            break;
    }
    if (entities.size() == 0)
        return SpellResult.NO_TARGET;
    String inventoryTitle = context.getMessage("title", "Select Target");
    int invSize = ((entities.size() + 9) / 9) * 9;
    Inventory displayInventory = CompatibilityUtils.createInventory(null, invSize, inventoryTitle);
    for (Map.Entry<Integer, WeakReference<Entity>> entry : entities.entrySet()) {
        Entity targetEntity = entry.getValue().get();
        if (targetEntity == null)
            continue;
        String displayName = DeprecatedUtils.getDisplayName(targetEntity);
        ItemStack skull = controller.getSkull(targetEntity, displayName);
        displayInventory.setItem(entry.getKey(), skull);
    }
    active = true;
    mage.activateGUI(this, displayInventory);
    return SpellResult.NO_ACTION;
}
Also used : Entity(org.bukkit.entity.Entity) LivingEntity(org.bukkit.entity.LivingEntity) Player(org.bukkit.entity.Player) ArrayList(java.util.ArrayList) LivingEntity(org.bukkit.entity.LivingEntity) MageController(com.elmakers.mine.bukkit.api.magic.MageController) Mage(com.elmakers.mine.bukkit.api.magic.Mage) WeakReference(java.lang.ref.WeakReference) ItemStack(org.bukkit.inventory.ItemStack) HashMap(java.util.HashMap) Map(java.util.Map) Inventory(org.bukkit.inventory.Inventory) Location(org.bukkit.Location)

Example 55 with Mage

use of com.elmakers.mine.bukkit.api.magic.Mage in project MagicPlugin by elBukkit.

the class MountArmorStandAction method mountNewArmorStand.

protected boolean mountNewArmorStand(CastContext context) {
    Mage mage = context.getMage();
    Entity entity = context.getEntity();
    ArmorStand armorStand = CompatibilityUtils.createArmorStand(mage.getLocation());
    if (armorStandInvisible) {
        CompatibilityUtils.setInvisible(armorStand, true);
    }
    if (armorStandMarker) {
        armorStand.setMarker(true);
    }
    if (!armorStandGravity) {
        armorStand.setGravity(false);
    }
    CompatibilityUtils.setDisabledSlots(armorStand, 2039552);
    if (armorStandSmall) {
        armorStand.setSmall(true);
    }
    MageController controller = context.getController();
    controller.setForceSpawn(true);
    try {
        CompatibilityUtils.addToWorld(entity.getWorld(), armorStand, armorStandSpawnReason);
    } catch (Exception ex) {
        ex.printStackTrace();
        return false;
    }
    controller.setForceSpawn(false);
    if (mountWand) {
        armorStand.setHelmet(item);
    } else if (helmetItem != null) {
        armorStand.setHelmet(helmetItem);
    }
    if (mountName != null && !mountName.isEmpty()) {
        armorStand.setCustomName(mountName);
    }
    context.setTargetEntity(armorStand);
    return true;
}
Also used : Entity(org.bukkit.entity.Entity) MageController(com.elmakers.mine.bukkit.api.magic.MageController) ArmorStand(org.bukkit.entity.ArmorStand) Mage(com.elmakers.mine.bukkit.api.magic.Mage)

Aggregations

Mage (com.elmakers.mine.bukkit.api.magic.Mage)187 Player (org.bukkit.entity.Player)62 Entity (org.bukkit.entity.Entity)56 Wand (com.elmakers.mine.bukkit.api.wand.Wand)47 MageController (com.elmakers.mine.bukkit.api.magic.MageController)45 ItemStack (org.bukkit.inventory.ItemStack)38 Location (org.bukkit.Location)33 LivingEntity (org.bukkit.entity.LivingEntity)31 ArrayList (java.util.ArrayList)25 ConfigurationSection (org.bukkit.configuration.ConfigurationSection)18 Inventory (org.bukkit.inventory.Inventory)16 MageClass (com.elmakers.mine.bukkit.api.magic.MageClass)15 Spell (com.elmakers.mine.bukkit.api.spell.Spell)14 SpellTemplate (com.elmakers.mine.bukkit.api.spell.SpellTemplate)14 Block (org.bukkit.block.Block)14 Target (com.elmakers.mine.bukkit.utility.Target)13 EventHandler (org.bukkit.event.EventHandler)13 ItemMeta (org.bukkit.inventory.meta.ItemMeta)12 CasterProperties (com.elmakers.mine.bukkit.api.magic.CasterProperties)10 Vector (org.bukkit.util.Vector)10