Search in sources :

Example 51 with Wand

use of com.elmakers.mine.bukkit.api.wand.Wand in project MagicPlugin by elBukkit.

the class WandCommandExecutor method onWandCreate.

public boolean onWandCreate(CommandSender sender, Player player) {
    Mage mage = controller.getMage(player);
    ItemStack heldItem = player.getInventory().getItemInMainHand();
    if (heldItem == null || heldItem.getType() == Material.AIR) {
        mage.sendMessage(api.getMessages().get("wand.no_item"));
        if (sender != player) {
            sender.sendMessage(api.getMessages().getParameterized("wand.player_no_item", "$name", player.getName()));
        }
        return false;
    }
    if (api.isWand(heldItem) || api.isSpell(heldItem) || api.isBrush(heldItem)) {
        sender.sendMessage(api.getMessages().getParameterized("wand.already_enchanted", "$item", MaterialAndData.getMaterialName(heldItem)));
        return false;
    }
    Wand wand = api.createWand(heldItem);
    player.getInventory().setItemInMainHand(wand.getItem());
    mage.checkWand();
    mage.sendMessage(api.getMessages().getParameterized("wand.enchanted", "$item", MaterialAndData.getMaterialName(heldItem)));
    if (sender != player) {
        sender.sendMessage(api.getMessages().getParameterized("wand.player_enchanted", "$item", MaterialAndData.getMaterialName(heldItem), "$name", player.getName()));
    }
    return true;
}
Also used : Mage(com.elmakers.mine.bukkit.api.magic.Mage) Wand(com.elmakers.mine.bukkit.api.wand.Wand) ItemStack(org.bukkit.inventory.ItemStack)

Example 52 with Wand

use of com.elmakers.mine.bukkit.api.wand.Wand in project MagicPlugin by elBukkit.

the class WandCommandExecutor method onWandUnlock.

public boolean onWandUnlock(CommandSender sender, Player player) {
    Wand wand = checkWand(sender, player, true, true, false);
    if (wand == null) {
        return true;
    }
    Mage mage = controller.getMage(player);
    wand.unlock();
    wand.saveState();
    mage.sendMessage(api.getMessages().get("wand.unlocked"));
    if (sender != player) {
        sender.sendMessage(api.getMessages().getParameterized("wand.player_unlocked", "$name", player.getName()));
    }
    return true;
}
Also used : Mage(com.elmakers.mine.bukkit.api.magic.Mage) Wand(com.elmakers.mine.bukkit.api.wand.Wand)

Example 53 with Wand

use of com.elmakers.mine.bukkit.api.wand.Wand in project MagicPlugin by elBukkit.

the class WandCommandExecutor method onWandFill.

public boolean onWandFill(CommandSender sender, Player player, int maxLevel) {
    Wand wand = checkWand(sender, player);
    if (wand == null) {
        return true;
    }
    Mage mage = controller.getMage(player);
    wand.fill(player, maxLevel);
    mage.sendMessage(api.getMessages().get("wand.filled").replace("$wand", wand.getName()));
    if (sender != player) {
        sender.sendMessage(api.getMessages().getParameterized("wand.player_filled", "$name", player.getName()));
    }
    return true;
}
Also used : Mage(com.elmakers.mine.bukkit.api.magic.Mage) Wand(com.elmakers.mine.bukkit.api.wand.Wand)

Example 54 with Wand

use of com.elmakers.mine.bukkit.api.wand.Wand in project MagicPlugin by elBukkit.

the class WandCommandExecutor method onWandSave.

public boolean onWandSave(CommandSender sender, Player player, String[] parameters) {
    if (parameters.length < 1) {
        sender.sendMessage("Use: /wand save <filename>");
        return true;
    }
    Wand wand = checkWand(sender, player);
    if (wand == null) {
        return true;
    }
    MageController controller = api.getController();
    String template = parameters[0];
    WandTemplate existing = controller.getWandTemplate(template);
    if (existing != null && !player.hasPermission("Magic.wand.overwrite")) {
        String creatorId = existing.getCreatorId();
        boolean isCreator = creatorId != null && creatorId.equalsIgnoreCase(player.getUniqueId().toString());
        if (!player.hasPermission("Magic.wand.overwrite_own") || !isCreator) {
            sender.sendMessage(ChatColor.RED + "The " + template + " wand already exists and you don't have permission to overwrite it.");
            return true;
        }
    }
    String inheritTemplate = wand.getTemplateKey();
    YamlConfiguration wandConfig = new YamlConfiguration();
    ConfigurationSection wandSection = wandConfig.createSection(template);
    wand.save(wandSection, true);
    wandSection.set("creator_id", player.getUniqueId().toString());
    wandSection.set("creator", player.getName());
    // inheriting from itself.
    if (inheritTemplate != null && inheritTemplate.equals(template)) {
        String oldTemplate = null;
        if (existing != null) {
            // This gives us the collapsed configuration, including inherited values.
            // We just want the ones changed by the template we are replacing, though.
            ConfigurationSection templateConfig = existing.getConfiguration();
            WandTemplate parent = existing.getParent();
            if (parent != null) {
                oldTemplate = parent.getKey();
                ConfigurationSection parentConfig = parent.getConfiguration();
                templateConfig = ConfigurationUtils.subtractConfiguration(templateConfig, parentConfig);
            }
            ConfigurationUtils.addConfigurations(wandSection, templateConfig, false);
        }
        wandSection.set("inherit", oldTemplate);
    }
    File wandFolder = new File(controller.getConfigFolder(), "wands");
    File wandFile = new File(wandFolder, template + ".yml");
    wandFolder.mkdirs();
    try {
        wandConfig.save(wandFile);
    } catch (IOException ex) {
        ex.printStackTrace();
        sender.sendMessage(ChatColor.RED + "Can't write to file " + wandFile.getName());
        return true;
    }
    String inherit = wandSection.getString("inherit", "");
    if (!inherit.isEmpty()) {
        WandTemplate inheritConfiguration = controller.getWandTemplate(inherit);
        ConfigurationUtils.addConfigurations(wandSection, inheritConfiguration.getConfiguration(), false);
    }
    controller.loadWandTemplate(template, wandSection);
    String message = "Wand saved as " + template;
    if (existing != null) {
        message = message + ChatColor.GOLD + " (Replaced Existing)";
    }
    sender.sendMessage(message);
    return true;
}
Also used : MageController(com.elmakers.mine.bukkit.api.magic.MageController) Wand(com.elmakers.mine.bukkit.api.wand.Wand) IOException(java.io.IOException) WandTemplate(com.elmakers.mine.bukkit.api.wand.WandTemplate) YamlConfiguration(org.bukkit.configuration.file.YamlConfiguration) File(java.io.File) ConfigurationSection(org.bukkit.configuration.ConfigurationSection)

Example 55 with Wand

use of com.elmakers.mine.bukkit.api.wand.Wand in project MagicPlugin by elBukkit.

the class WandCommandExecutor method onWandDescribe.

public boolean onWandDescribe(CommandSender sender, Player player, String[] parameters) {
    // Force-save wand data so it is up to date
    Mage mage = controller.getMage(player);
    Wand activeWand = mage.getActiveWand();
    if (activeWand != null) {
        activeWand.saveState();
    }
    ItemStack itemInHand = player.getInventory().getItemInMainHand();
    if (itemInHand == null) {
        if (sender != player) {
            sender.sendMessage(api.getMessages().getParameterized("wand.player_no_item", "$name", player.getName()));
        } else {
            player.sendMessage(api.getMessages().get("wand.no_item"));
        }
        return true;
    }
    if (api.isSpell(itemInHand)) {
        String spellKey = api.getSpell(itemInHand);
        sender.sendMessage(ChatColor.GOLD + "Spell: " + spellKey);
        SpellTemplate spell = api.getSpellTemplate(spellKey);
        if (spell != null) {
            sender.sendMessage(" " + ChatColor.GOLD + spell.getName());
        } else {
            sender.sendMessage(ChatColor.RED + " (Unknown Spell)");
        }
    } else if (api.isBrush(itemInHand)) {
        String brushKey = api.getBrush(itemInHand);
        sender.sendMessage(ChatColor.GRAY + "Brush: " + brushKey);
        MaterialAndData brush = new MaterialAndData(brushKey);
        sender.sendMessage(" " + ChatColor.GRAY + brush.getName());
    } else if (api.isWand(itemInHand) || api.isUpgrade(itemInHand)) {
        Wand wand = api.getWand(itemInHand);
        if (parameters.length == 0) {
            sender.sendMessage(ChatColor.BLUE + "Use " + ChatColor.AQUA + "/wand describe <property>" + ChatColor.BLUE + " for specific properties");
            wand.describe(sender, BaseMagicProperties.HIDDEN_PROPERTY_KEYS);
        } else {
            Object property = wand.getProperty(parameters[0]);
            if (property == null) {
                sender.sendMessage(ChatColor.DARK_AQUA + parameters[0] + ChatColor.GRAY + ": " + ChatColor.RED + "(Not Set)");
            } else {
                sender.sendMessage(ChatColor.DARK_AQUA + parameters[0] + ChatColor.GRAY + ": " + ChatColor.WHITE + InventoryUtils.describeProperty(property));
            }
        }
    } else {
        sender.sendMessage(ChatColor.RED + "That is not a magic item");
    }
    return true;
}
Also used : Mage(com.elmakers.mine.bukkit.api.magic.Mage) MaterialAndData(com.elmakers.mine.bukkit.block.MaterialAndData) Wand(com.elmakers.mine.bukkit.api.wand.Wand) ItemStack(org.bukkit.inventory.ItemStack) SpellTemplate(com.elmakers.mine.bukkit.api.spell.SpellTemplate)

Aggregations

Wand (com.elmakers.mine.bukkit.api.wand.Wand)60 Mage (com.elmakers.mine.bukkit.api.magic.Mage)47 ItemStack (org.bukkit.inventory.ItemStack)20 Player (org.bukkit.entity.Player)18 MageController (com.elmakers.mine.bukkit.api.magic.MageController)14 Entity (org.bukkit.entity.Entity)10 SpellTemplate (com.elmakers.mine.bukkit.api.spell.SpellTemplate)7 WandUpgradePath (com.elmakers.mine.bukkit.api.wand.WandUpgradePath)7 ArrayList (java.util.ArrayList)7 CasterProperties (com.elmakers.mine.bukkit.api.magic.CasterProperties)6 MageClass (com.elmakers.mine.bukkit.api.magic.MageClass)5 Inventory (org.bukkit.inventory.Inventory)5 ItemMeta (org.bukkit.inventory.meta.ItemMeta)5 ProgressionPath (com.elmakers.mine.bukkit.api.magic.ProgressionPath)4 Spell (com.elmakers.mine.bukkit.api.spell.Spell)4 MaterialAndData (com.elmakers.mine.bukkit.block.MaterialAndData)4 Nullable (javax.annotation.Nullable)4 Checker (ch.njol.util.Checker)3 IOException (java.io.IOException)3 Block (org.bukkit.block.Block)3