Search in sources :

Example 1 with SkilltreeIcon

use of de.Keyle.MyPet.api.skill.skilltree.SkilltreeIcon in project MyPet by xXKeyleXx.

the class PetShop method load.

public void load(ConfigurationSection section) {
    tryToLoad("Name", () -> displayName = section.getString("Name", name));
    tryToLoad("Default", () -> defaultShop = section.getBoolean("Default", false));
    tryToLoad("Position", () -> position = section.getInt("Position", -1));
    tryToLoad("Icon", () -> {
        if (section.contains("Icon")) {
            ConfigurationSection iconSection = section.getConfigurationSection("Icon");
            SkilltreeIcon icon = new SkilltreeIcon();
            tryToLoad("Icon.Material", () -> {
                if (iconSection.contains("Material")) {
                    icon.setMaterial(iconSection.getString("Material", "chest"));
                }
            });
            tryToLoad("Icon.Glowing", () -> {
                if (iconSection.contains("Glowing")) {
                    icon.setGlowing(iconSection.getBoolean("Glowing", false));
                }
            });
            this.icon = icon;
        }
    });
    tryToLoad("Balance.Type", () -> {
        wallet = WalletType.getByName(section.getString("Balance.Type", ""));
        if (wallet == null) {
            wallet = WalletType.None;
        }
        switch(wallet) {
            case Bank:
            case Player:
                tryToLoad("Display Name", () -> {
                    walletOwner = section.getString("Balance.Owner", null);
                });
        }
    });
    tryToLoad("Pets", () -> {
        ConfigurationSection pets = section.getConfigurationSection("Pets");
        if (pets == null) {
            MyPetApi.getLogger().warning(displayName + " shop failed to load! Please check your shop config.");
            return;
        }
        Queue<ShopMyPet> filler = new ArrayDeque<>();
        for (String name : pets.getKeys(false)) {
            tryToLoad("Pets." + name, () -> {
                ShopMyPet pet = new ShopMyPet(name);
                try {
                    pet.load(pets.getConfigurationSection(name));
                    List<RepositoryMyPetConverterService> converters = MyPetApi.getServiceManager().getServices(RepositoryMyPetConverterService.class);
                    for (RepositoryMyPetConverterService converter : converters) {
                        converter.convert(pet);
                    }
                    if (Util.isBetween(0, 53, pet.getPosition())) {
                        this.pets.put(pet.getPosition(), pet);
                    } else {
                        filler.add(pet);
                    }
                } catch (MyPetTypeNotFoundException ignored) {
                }
            });
        }
        int slot = 0;
        while (!filler.isEmpty() && slot < 54) {
            if (this.pets.containsKey(slot)) {
                slot++;
                continue;
            }
            ShopMyPet pet = filler.poll();
            this.pets.put(slot, pet);
        }
    });
}
Also used : RepositoryMyPetConverterService(de.Keyle.MyPet.api.util.service.types.RepositoryMyPetConverterService) SkilltreeIcon(de.Keyle.MyPet.api.skill.skilltree.SkilltreeIcon) MyPetTypeNotFoundException(de.Keyle.MyPet.api.exceptions.MyPetTypeNotFoundException) ConfigurationSection(org.bukkit.configuration.ConfigurationSection)

Example 2 with SkilltreeIcon

use of de.Keyle.MyPet.api.skill.skilltree.SkilltreeIcon in project MyPet by xXKeyleXx.

the class CommandChooseSkilltree method onCommand.

public boolean onCommand(final CommandSender sender, Command command, String label, String[] args) {
    if (!(sender instanceof Player)) {
        sender.sendMessage("You can't use this command from server console!");
        return true;
    }
    Player player = (Player) sender;
    if (WorldGroup.getGroupByWorld(player.getWorld()).isDisabled()) {
        player.sendMessage(Translation.getString("Message.No.AllowedHere", player));
        return true;
    }
    if (MyPetApi.getMyPetManager().hasActiveMyPet(player)) {
        final MyPet myPet = MyPetApi.getMyPetManager().getMyPet(player);
        final MyPetPlayer myPetOwner = myPet.getOwner();
        if (Configuration.Skilltree.AUTOMATIC_SKILLTREE_ASSIGNMENT && !myPet.getOwner().isMyPetAdmin()) {
            myPet.autoAssignSkilltree();
            sender.sendMessage(Translation.getString("Message.Command.ChooseSkilltree.AutomaticSkilltreeAssignment", myPet.getOwner()));
        } else {
            if (args.length >= 1) {
                if (Configuration.Skilltree.AUTOMATIC_SKILLTREE_ASSIGNMENT && !myPet.getOwner().isMyPetAdmin()) {
                    myPet.autoAssignSkilltree();
                    sender.sendMessage(Translation.getString("Message.Command.ChooseSkilltree.AutomaticSkilltreeAssignment", myPet.getOwner()));
                } else if (myPet.getSkilltree() != null && Configuration.Skilltree.CHOOSE_SKILLTREE_ONLY_ONCE && !myPet.getOwner().isMyPetAdmin()) {
                    sender.sendMessage(Util.formatText(Translation.getString("Message.Command.ChooseSkilltree.OnlyOnce", myPet.getOwner()), myPet.getPetName()));
                } else {
                    String skilltreeName = "";
                    for (String arg : args) {
                        skilltreeName += arg + " ";
                    }
                    skilltreeName = skilltreeName.substring(0, skilltreeName.length() - 1);
                    if (MyPetApi.getSkilltreeManager().hasSkilltree(skilltreeName)) {
                        Skilltree skilltree = MyPetApi.getSkilltreeManager().getSkilltree(skilltreeName);
                        if (skilltree.getMobTypes().contains(myPet.getPetType()) && skilltree.checkRequirements(myPet)) {
                            int requiredLevel = skilltree.getRequiredLevel();
                            if (requiredLevel > 1 && myPet.getExperience().getLevel() < requiredLevel) {
                                myPet.getOwner().sendMessage(Util.formatText(Translation.getString("Message.Skilltree.RequiresLevel.Message", player), myPet.getPetName(), requiredLevel));
                            } else if (myPet.setSkilltree(skilltree, MyPetSelectSkilltreeEvent.Source.PlayerCommand)) {
                                sender.sendMessage(Util.formatText(Translation.getString("Message.Skilltree.SwitchedTo", player), Colorizer.setColors(skilltree.getDisplayName())));
                                if (!myPet.getOwner().isMyPetAdmin() || Configuration.Skilltree.SWITCH_FEE_ADMIN) {
                                    double switchPenalty = Configuration.Skilltree.SWITCH_FEE_FIXED;
                                    switchPenalty += myPet.getExperience().getExp() * Configuration.Skilltree.SWITCH_FEE_PERCENT / 100.;
                                    if (requiredLevel > 1) {
                                        double minExp = myPet.getExperience().getExpByLevel(requiredLevel);
                                        switchPenalty = myPet.getExp() - switchPenalty < minExp ? myPet.getExp() - minExp : switchPenalty;
                                    }
                                    if (Configuration.LevelSystem.Experience.ALLOW_LEVEL_DOWNGRADE) {
                                        myPet.getExperience().removeExp(switchPenalty);
                                    } else {
                                        myPet.getExperience().removeCurrentExp(switchPenalty);
                                    }
                                }
                            } else {
                                sender.sendMessage(Translation.getString("Message.Skilltree.NotSwitched", player));
                            }
                        } else {
                            sender.sendMessage(Util.formatText(Translation.getString("Message.Command.Skilltree.CantFindSkilltree", player), skilltreeName));
                        }
                    } else {
                        sender.sendMessage(Util.formatText(Translation.getString("Message.Command.Skilltree.CantFindSkilltree", player), skilltreeName));
                    }
                }
            } else {
                List<Skilltree> availableSkilltrees = new ArrayList<>();
                for (Skilltree skilltree : MyPetApi.getSkilltreeManager().getOrderedSkilltrees()) {
                    if (skilltree.getMobTypes().contains(myPet.getPetType()) && skilltree.checkRequirements(myPet)) {
                        availableSkilltrees.add(skilltree);
                    }
                }
                if (availableSkilltrees.size() == 0) {
                    sender.sendMessage(Util.formatText(Translation.getString("Message.Command.ChooseSkilltree.NoneAvailable", player), myPet.getPetName()));
                    return true;
                }
                final Map<Integer, Skilltree> skilltreeSlotMap = new HashMap<>();
                IconMenu menu = new IconMenu(Util.cutString(Util.formatText(Translation.getString("Message.Skilltree.Available", myPetOwner), myPet.getPetName()), 32), event -> {
                    if (myPet != myPetOwner.getMyPet()) {
                        event.setWillClose(true);
                        event.setWillDestroy(true);
                        return;
                    }
                    if (myPet.getSkilltree() != null && Configuration.Skilltree.CHOOSE_SKILLTREE_ONLY_ONCE && !myPet.getOwner().isMyPetAdmin()) {
                        sender.sendMessage(Util.formatText(Translation.getString("Message.Command.ChooseSkilltree.OnlyOnce", myPet.getOwner()), myPet.getPetName()));
                    } else if (skilltreeSlotMap.containsKey(event.getPosition())) {
                        Skilltree selecedSkilltree = skilltreeSlotMap.get(event.getPosition());
                        if (selecedSkilltree != null) {
                            int requiredLevel = selecedSkilltree.getRequiredLevel();
                            if (requiredLevel > 1 && myPet.getExperience().getLevel() < requiredLevel) {
                                myPet.getOwner().sendMessage(Util.formatText(Translation.getString("Message.Skilltree.RequiresLevel.Message", myPetOwner), myPet.getPetName(), requiredLevel));
                            } else if (myPet.setSkilltree(selecedSkilltree, MyPetSelectSkilltreeEvent.Source.PlayerCommand)) {
                                myPet.getOwner().sendMessage(Util.formatText(Translation.getString("Message.Skilltree.SwitchedTo", myPetOwner), Colorizer.setColors(selecedSkilltree.getDisplayName())));
                                if (!myPet.getOwner().isMyPetAdmin() || Configuration.Skilltree.SWITCH_FEE_ADMIN) {
                                    double switchPenalty = Configuration.Skilltree.SWITCH_FEE_FIXED;
                                    switchPenalty += myPet.getExperience().getExp() * Configuration.Skilltree.SWITCH_FEE_PERCENT / 100.;
                                    if (requiredLevel > 1) {
                                        double minExp = myPet.getExperience().getExpByLevel(requiredLevel);
                                        switchPenalty = myPet.getExp() - switchPenalty < minExp ? myPet.getExp() - minExp : switchPenalty;
                                    }
                                    if (Configuration.LevelSystem.Experience.ALLOW_LEVEL_DOWNGRADE) {
                                        myPet.getExperience().removeExp(switchPenalty);
                                    } else {
                                        myPet.getExperience().removeCurrentExp(switchPenalty);
                                    }
                                }
                            } else {
                                myPet.getOwner().sendMessage(Translation.getString("Message.Skilltree.NotSwitched", myPetOwner));
                            }
                        }
                    }
                    event.setWillClose(true);
                    event.setWillDestroy(true);
                }, MyPetApi.getPlugin());
                ItemDatabase itemDatabase = MyPetApi.getServiceManager().getService(ItemDatabase.class).get();
                for (int i = 0; i < availableSkilltrees.size(); i++) {
                    Skilltree addedSkilltree = availableSkilltrees.get(i);
                    SkilltreeIcon icon = addedSkilltree.getIcon();
                    MaterialHolder material = itemDatabase.getByID(icon.getMaterial());
                    if (material == null) {
                        material = itemDatabase.getByID("oak_sapling");
                    }
                    IconMenuItem option = new IconMenuItem().setMaterial(material.getMaterial()).setGlowing(icon.isGlowing()).setTitle(ChatColor.RESET + "❱❱❱  " + ChatColor.DARK_GREEN + Colorizer.setColors(addedSkilltree.getDisplayName()) + ChatColor.RESET + "  ❰❰❰");
                    if (material.isLegacy()) {
                        option.setData(material.getLegacyId().getData());
                    }
                    boolean selectable = false;
                    int requiredLevel = addedSkilltree.getRequiredLevel();
                    if (requiredLevel > 1) {
                        selectable = myPet.getExperience().getLevel() >= addedSkilltree.getRequiredLevel();
                    }
                    List<String> description = new ArrayList<>();
                    if (requiredLevel > 1) {
                        String reqLevelMessage = ChatColor.RESET + "▶▶▶  ";
                        if (selectable) {
                            reqLevelMessage += ChatColor.GREEN;
                        } else {
                            reqLevelMessage += ChatColor.DARK_RED;
                        }
                        reqLevelMessage += Util.formatText(Translation.getString("Message.Skilltree.RequiresLevel.Item", myPetOwner), requiredLevel) + ChatColor.RESET + "  ◀◀◀";
                        description.add(reqLevelMessage);
                    }
                    for (String line : addedSkilltree.getDescription()) {
                        description.add(ChatColor.RESET + Colorizer.setColors(line));
                    }
                    option.addLore(description);
                    menu.setOption(i, option);
                    skilltreeSlotMap.put(i, addedSkilltree);
                }
                menu.open(player);
            }
        }
    } else {
        sender.sendMessage(Translation.getString("Message.No.HasPet", player));
    }
    return true;
}
Also used : Skilltree(de.Keyle.MyPet.api.skill.skilltree.Skilltree) Player(org.bukkit.entity.Player) MyPetPlayer(de.Keyle.MyPet.api.player.MyPetPlayer) IconMenu(de.Keyle.MyPet.api.gui.IconMenu) MyPetPlayer(de.Keyle.MyPet.api.player.MyPetPlayer) MyPet(de.Keyle.MyPet.api.entity.MyPet) ItemDatabase(de.Keyle.MyPet.api.util.inventory.material.ItemDatabase) MaterialHolder(de.Keyle.MyPet.api.util.inventory.material.MaterialHolder) SkilltreeIcon(de.Keyle.MyPet.api.skill.skilltree.SkilltreeIcon) IconMenuItem(de.Keyle.MyPet.api.gui.IconMenuItem)

Example 3 with SkilltreeIcon

use of de.Keyle.MyPet.api.skill.skilltree.SkilltreeIcon in project MyPet by xXKeyleXx.

the class CommandShop method onCommand.

public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
    if (!MyPetApi.getHookHelper().isEconomyEnabled()) {
        sender.sendMessage(Translation.getString("Message.No.Economy", sender));
        return true;
    }
    Player player = null;
    if (sender instanceof ConsoleCommandSender && args.length < 2) {
        sender.sendMessage("You can't use this command from server console!");
        return true;
    }
    if (sender instanceof Player) {
        if (WorldGroup.getGroupByWorld(((Player) sender).getWorld()).isDisabled()) {
            sender.sendMessage(Translation.getString("Message.No.AllowedHere", sender));
            return true;
        }
    }
    if (args.length > 1) {
        if (!(sender instanceof Player) || Permissions.has((Player) sender, "MyPet.admin")) {
            player = Bukkit.getPlayer(args[1]);
            if (player == null || !player.isOnline()) {
                sender.sendMessage("[" + ChatColor.AQUA + "MyPet" + ChatColor.RESET + "] " + Translation.getString("Message.No.PlayerOnline", sender));
                return true;
            }
        }
    }
    if (player == null) {
        if (!(sender instanceof Player)) {
            sender.sendMessage("You can't use this command from server console!");
            return true;
        }
        player = (Player) sender;
    }
    final Optional<ShopManager> shopManager = MyPetApi.getServiceManager().getService(ShopManager.class);
    if (shopManager.isPresent()) {
        if (args.length > 0) {
            String shop = args[0];
            if (Permissions.has(player, "MyPet.shop.access." + shop) || Permissions.has(player, "MyPet.admin")) {
                shopManager.get().open(shop, player);
            } else {
                player.sendMessage(Translation.getString("Message.No.Allowed", player));
            }
        } else {
            String shop = shopManager.get().getDefaultShopName();
            if (shop != null) {
                if (Permissions.has(player, "MyPet.shop.access." + shop) || Permissions.has(player, "MyPet.admin")) {
                    shopManager.get().open(player);
                    return true;
                }
            } else {
                final List<String> availableShops = getAvailablePetShops(player);
                if (availableShops != null && availableShops.size() > 0) {
                    final Player finalPlayer = player;
                    Map<Integer, String> shops = new HashMap<>();
                    IconMenu menu = new IconMenu(Translation.getString("Message.Shop.Available", player), event -> {
                        String shopname = shops.get(event.getPosition());
                        if (shopname != null) {
                            final String finalShopname = shopname;
                            new BukkitRunnable() {

                                @Override
                                public void run() {
                                    shopManager.get().open(finalShopname, finalPlayer);
                                }
                            }.runTaskLater(MyPetApi.getPlugin(), 5L);
                            event.setWillClose(true);
                            event.setWillDestroy(true);
                        }
                    }, MyPetApi.getPlugin());
                    ItemDatabase itemDatabase = MyPetApi.getServiceManager().getService(ItemDatabase.class).get();
                    for (String shopname : availableShops) {
                        PetShop s = shopManager.get().getShop(shopname);
                        IconMenuItem icon = new IconMenuItem();
                        icon.setTitle(RESET + Colorizer.setColors(s.getDisplayName()));
                        SkilltreeIcon si = s.getIcon();
                        MaterialHolder material = itemDatabase.getByID(si.getMaterial());
                        if (material == null) {
                            material = itemDatabase.getByID("chest");
                        }
                        icon.setMaterial(material.getMaterial()).setGlowing(si.isGlowing());
                        if (material.isLegacy()) {
                            icon.setData(material.getLegacyId().getData());
                        }
                        if (Util.isBetween(0, 53, s.getPosition())) {
                            menu.setOption(s.getPosition(), icon);
                            shops.put(s.getPosition(), s.getName());
                        } else {
                            shops.put(menu.addOption(icon), s.getName());
                        }
                    }
                    menu.open(player);
                    return true;
                }
            }
            player.sendMessage(Translation.getString("Message.No.Allowed", player));
        }
    }
    return true;
}
Also used : PetShop(de.Keyle.MyPet.util.shop.PetShop) Player(org.bukkit.entity.Player) IconMenu(de.Keyle.MyPet.api.gui.IconMenu) ItemDatabase(de.Keyle.MyPet.api.util.inventory.material.ItemDatabase) BukkitRunnable(org.bukkit.scheduler.BukkitRunnable) MaterialHolder(de.Keyle.MyPet.api.util.inventory.material.MaterialHolder) ConsoleCommandSender(org.bukkit.command.ConsoleCommandSender) SkilltreeIcon(de.Keyle.MyPet.api.skill.skilltree.SkilltreeIcon) ShopManager(de.Keyle.MyPet.util.shop.ShopManager) IconMenuItem(de.Keyle.MyPet.api.gui.IconMenuItem)

Aggregations

SkilltreeIcon (de.Keyle.MyPet.api.skill.skilltree.SkilltreeIcon)3 IconMenu (de.Keyle.MyPet.api.gui.IconMenu)2 IconMenuItem (de.Keyle.MyPet.api.gui.IconMenuItem)2 ItemDatabase (de.Keyle.MyPet.api.util.inventory.material.ItemDatabase)2 MaterialHolder (de.Keyle.MyPet.api.util.inventory.material.MaterialHolder)2 Player (org.bukkit.entity.Player)2 MyPet (de.Keyle.MyPet.api.entity.MyPet)1 MyPetTypeNotFoundException (de.Keyle.MyPet.api.exceptions.MyPetTypeNotFoundException)1 MyPetPlayer (de.Keyle.MyPet.api.player.MyPetPlayer)1 Skilltree (de.Keyle.MyPet.api.skill.skilltree.Skilltree)1 RepositoryMyPetConverterService (de.Keyle.MyPet.api.util.service.types.RepositoryMyPetConverterService)1 PetShop (de.Keyle.MyPet.util.shop.PetShop)1 ShopManager (de.Keyle.MyPet.util.shop.ShopManager)1 ConsoleCommandSender (org.bukkit.command.ConsoleCommandSender)1 ConfigurationSection (org.bukkit.configuration.ConfigurationSection)1 BukkitRunnable (org.bukkit.scheduler.BukkitRunnable)1