Search in sources :

Example 1 with JobInfo

use of com.gamingmesh.jobs.container.JobInfo in project Jobs by GamingMesh.

the class JobsCommands method jobInfoMessage.

/**
     * Displays info about a job
     * @param player - the player of the job
     * @param job - the job we are displaying info about
     * @param type - type of info
     * @return the message
     */
private String jobInfoMessage(JobsPlayer player, Job job, String type) {
    if (job == null) {
        // job doesn't exist
        return ChatColor.RED + Language.getMessage("command.error.job");
    }
    if (type == null) {
        type = "";
    } else {
        type = type.toLowerCase();
    }
    StringBuilder message = new StringBuilder();
    int showAllTypes = 1;
    for (ActionType actionType : ActionType.values()) {
        if (type.startsWith(actionType.getName().toLowerCase())) {
            showAllTypes = 0;
            break;
        }
    }
    for (ActionType actionType : ActionType.values()) {
        if (showAllTypes == 1 || type.startsWith(actionType.getName().toLowerCase())) {
            List<JobInfo> info = job.getJobInfo(actionType);
            if (info != null && !info.isEmpty()) {
                message.append(jobInfoMessage(player, job, actionType));
            } else if (showAllTypes == 0) {
                String myMessage = Language.getMessage("command.info.output." + actionType.getName().toLowerCase() + ".none");
                myMessage = myMessage.replace("%jobname%", job.getChatColor() + job.getName() + ChatColor.WHITE);
                message.append(myMessage);
            }
        }
    }
    return message.toString();
}
Also used : ActionType(com.gamingmesh.jobs.container.ActionType) JobInfo(com.gamingmesh.jobs.container.JobInfo)

Example 2 with JobInfo

use of com.gamingmesh.jobs.container.JobInfo in project Jobs by GamingMesh.

the class JobsCommands method jobInfoMessage.

/**
     * Displays info about a particular action
     * @param player - the player of the job
     * @param prog - the job we are displaying info about
     * @param type - the type of action
     * @return the message
     */
private String jobInfoMessage(JobsPlayer player, Job job, ActionType type) {
    StringBuilder message = new StringBuilder();
    message.append(Language.getMessage("command.info.output." + type.getName().toLowerCase()));
    message.append(":\n");
    int level = 1;
    JobProgression prog = player.getJobProgression(job);
    if (prog != null)
        level = prog.getLevel();
    int numjobs = player.getJobProgression().size();
    List<JobInfo> jobInfo = job.getJobInfo(type);
    for (JobInfo info : jobInfo) {
        String materialName = info.getName().toLowerCase().replace('_', ' ');
        double income = info.getIncome(level, numjobs);
        ChatColor incomeColor = income >= 0 ? ChatColor.GREEN : ChatColor.DARK_RED;
        double xp = info.getExperience(level, numjobs);
        ChatColor xpColor = xp >= 0 ? ChatColor.YELLOW : ChatColor.GRAY;
        String xpString = String.format("%.2f xp", xp);
        message.append("  ");
        message.append(materialName);
        message.append(" -> ");
        message.append(xpColor.toString());
        message.append(xpString);
        message.append(' ');
        message.append(incomeColor.toString());
        message.append(Jobs.getEconomy().format(income));
        message.append('\n');
    }
    return message.toString();
}
Also used : JobInfo(com.gamingmesh.jobs.container.JobInfo) JobProgression(com.gamingmesh.jobs.container.JobProgression) ChatColor(com.gamingmesh.jobs.util.ChatColor)

Example 3 with JobInfo

use of com.gamingmesh.jobs.container.JobInfo in project Jobs by GamingMesh.

the class JobConfig method loadJobSettings.

/**
     * Method to load the jobs configuration
     * 
     * loads from Jobs/jobConfig.yml
     */
private void loadJobSettings() {
    File f = new File(plugin.getDataFolder(), "jobConfig.yml");
    ArrayList<Job> jobs = new ArrayList<Job>();
    Jobs.setJobs(jobs);
    Jobs.setNoneJob(null);
    if (!f.exists()) {
        try {
            f.createNewFile();
        } catch (IOException e) {
            Jobs.getPluginLogger().severe("Unable to create jobConfig.yml!  No jobs were loaded!");
            return;
        }
    }
    YamlConfiguration conf = new YamlConfiguration();
    conf.options().pathSeparator('/');
    try {
        conf.load(f);
    } catch (Exception e) {
        Bukkit.getServer().getLogger().severe("==================== Jobs ====================");
        Bukkit.getServer().getLogger().severe("Unable to load jobConfig.yml!");
        Bukkit.getServer().getLogger().severe("Check your config for formatting issues!");
        Bukkit.getServer().getLogger().severe("No jobs were loaded!");
        Bukkit.getServer().getLogger().severe("Error: " + e.getMessage());
        Bukkit.getServer().getLogger().severe("==============================================");
        return;
    }
    conf.options().header(new StringBuilder().append("Jobs configuration.").append(System.getProperty("line.separator")).append(System.getProperty("line.separator")).append("Stores information about each job.").append(System.getProperty("line.separator")).append(System.getProperty("line.separator")).append("For example configurations, visit http://dev.bukkit.org/server-mods/jobs/.").append(System.getProperty("line.separator")).toString());
    ConfigurationSection jobsSection = conf.getConfigurationSection("Jobs");
    if (jobsSection == null) {
        jobsSection = conf.createSection("Jobs");
    }
    for (String jobKey : jobsSection.getKeys(false)) {
        ConfigurationSection jobSection = jobsSection.getConfigurationSection(jobKey);
        String jobName = jobSection.getString("fullname");
        if (jobName == null) {
            Jobs.getPluginLogger().warning("Job " + jobKey + " has an invalid fullname property. Skipping job!");
            continue;
        }
        int maxLevel = jobSection.getInt("max-level", 0);
        if (maxLevel < 0)
            maxLevel = 0;
        Integer maxSlots = jobSection.getInt("slots", 0);
        if (maxSlots.intValue() <= 0) {
            maxSlots = null;
        }
        String jobShortName = jobSection.getString("shortname");
        if (jobShortName == null) {
            Jobs.getPluginLogger().warning("Job " + jobKey + " is missing the shortname property.  Skipping job!");
            continue;
        }
        String description = jobSection.getString("description", "");
        ChatColor color = ChatColor.WHITE;
        if (jobSection.contains("ChatColour")) {
            color = ChatColor.matchColor(jobSection.getString("ChatColour", ""));
            if (color == null) {
                color = ChatColor.WHITE;
                Jobs.getPluginLogger().warning("Job " + jobKey + " has an invalid ChatColour property.  Defaulting to WHITE!");
            }
        }
        DisplayMethod displayMethod = DisplayMethod.matchMethod(jobSection.getString("chat-display", ""));
        if (displayMethod == null) {
            Jobs.getPluginLogger().warning("Job " + jobKey + " has an invalid chat-display property. Defaulting to None!");
            displayMethod = DisplayMethod.NONE;
        }
        Parser maxExpEquation;
        String maxExpEquationInput = jobSection.getString("leveling-progression-equation");
        try {
            maxExpEquation = new Parser(maxExpEquationInput);
            // test equation
            maxExpEquation.setVariable("numjobs", 1);
            maxExpEquation.setVariable("joblevel", 1);
            maxExpEquation.getValue();
        } catch (Exception e) {
            Jobs.getPluginLogger().warning("Job " + jobKey + " has an invalid leveling-progression-equation property. Skipping job!");
            continue;
        }
        Parser incomeEquation;
        String incomeEquationInput = jobSection.getString("income-progression-equation");
        try {
            incomeEquation = new Parser(incomeEquationInput);
            // test equation
            incomeEquation.setVariable("numjobs", 1);
            incomeEquation.setVariable("joblevel", 1);
            incomeEquation.setVariable("baseincome", 1);
            incomeEquation.getValue();
        } catch (Exception e) {
            Jobs.getPluginLogger().warning("Job " + jobKey + " has an invalid income-progression-equation property. Skipping job!");
            continue;
        }
        Parser expEquation;
        String expEquationInput = jobSection.getString("experience-progression-equation");
        try {
            expEquation = new Parser(expEquationInput);
            // test equation
            expEquation.setVariable("numjobs", 1);
            expEquation.setVariable("joblevel", 1);
            expEquation.setVariable("baseexperience", 1);
            expEquation.getValue();
        } catch (Exception e) {
            Jobs.getPluginLogger().warning("Job " + jobKey + " has an invalid experience-progression-equation property. Skipping job!");
            continue;
        }
        // Permissions
        ArrayList<JobPermission> jobPermissions = new ArrayList<JobPermission>();
        ConfigurationSection permissionsSection = jobSection.getConfigurationSection("permissions");
        if (permissionsSection != null) {
            for (String permissionKey : permissionsSection.getKeys(false)) {
                ConfigurationSection permissionSection = permissionsSection.getConfigurationSection(permissionKey);
                String node = permissionKey.toLowerCase();
                if (permissionSection == null) {
                    Jobs.getPluginLogger().warning("Job " + jobKey + " has an invalid permission key" + permissionKey + "!");
                    continue;
                }
                boolean value = permissionSection.getBoolean("value", true);
                int levelRequirement = permissionSection.getInt("level", 0);
                jobPermissions.add(new JobPermission(node, value, levelRequirement));
            }
        }
        Job job = new Job(jobName, jobShortName, description, color, maxExpEquation, displayMethod, maxLevel, maxSlots, jobPermissions);
        for (ActionType actionType : ActionType.values()) {
            ConfigurationSection typeSection = jobSection.getConfigurationSection(actionType.getName());
            ArrayList<JobInfo> jobInfo = new ArrayList<JobInfo>();
            if (typeSection != null) {
                for (String key : typeSection.getKeys(false)) {
                    ConfigurationSection section = typeSection.getConfigurationSection(key);
                    String myKey = key.toUpperCase();
                    String type = null;
                    String subType = "";
                    if (myKey.contains("-")) {
                        // uses subType
                        subType = ":" + myKey.split("-")[1];
                        myKey = myKey.split("-")[0];
                    }
                    Material material = Material.matchMaterial(myKey);
                    if (material == null) {
                        // try integer method
                        Integer matId = null;
                        try {
                            matId = Integer.decode(myKey);
                        } catch (NumberFormatException e) {
                        }
                        if (matId != null) {
                            material = Material.getMaterial(matId);
                            if (material != null) {
                                Jobs.getPluginLogger().warning("Job " + jobKey + " " + actionType.getName() + " is using a block by number ID: " + key + "!");
                                Jobs.getPluginLogger().warning("Please switch to using the Material name instead: " + material.toString() + "!");
                                Jobs.getPluginLogger().warning("Blocks by number IDs may break in a future release!");
                            }
                        }
                    }
                    if (material != null) {
                        // Break and Place actions MUST be blocks
                        if (actionType == ActionType.BREAK || actionType == ActionType.PLACE) {
                            if (!material.isBlock()) {
                                Jobs.getPluginLogger().warning("Job " + jobKey + " has an invalid " + actionType.getName() + " type property: " + key + "! Material must be a block!");
                                continue;
                            }
                        }
                        /* 
                             * Historically, GLOWING_REDSTONE_ORE would ONLY work as REDSTONE_ORE, and putting
                             * GLOWING_REDSTONE_ORE in the configuration would not work.  Unfortunately, this is 
                             * completely backwards and wrong.
                             * 
                             * To maintain backwards compatibility, all instances of REDSTONE_ORE should normalize
                             * to GLOWING_REDSTONE_ORE, and warn the user to change their configuration.  In the
                             * future this hack may be removed and anybody using REDSTONE_ORE will have their
                             * configurations broken.
                             */
                        if (material == Material.REDSTONE_ORE) {
                            Jobs.getPluginLogger().warning("Job " + jobKey + " is using REDSTONE_ORE instead of GLOWING_REDSTONE_ORE.");
                            Jobs.getPluginLogger().warning("Automatically changing block to GLOWING_REDSTONE_ORE.  Please update your configuration.");
                            Jobs.getPluginLogger().warning("In vanilla minecraft, REDSTONE_ORE changes to GLOWING_REDSTONE_ORE when interacted with.");
                            Jobs.getPluginLogger().warning("In the future, Jobs using REDSTONE_ORE instead of GLOWING_REDSTONE_ORE may fail to work correctly.");
                            material = Material.GLOWING_REDSTONE_ORE;
                        }
                        // END HACK
                        type = material.toString();
                    } else if (actionType == ActionType.KILL) {
                        // check entities
                        EntityType entity = EntityType.fromName(key);
                        if (entity == null) {
                            try {
                                entity = EntityType.valueOf(key.toUpperCase());
                            } catch (IllegalArgumentException e) {
                            }
                        }
                        if (entity != null && entity.isAlive())
                            type = entity.toString();
                    }
                    if (type == null) {
                        Jobs.getPluginLogger().warning("Job " + jobKey + " has an invalid " + actionType.getName() + " type property: " + key + "!");
                        continue;
                    }
                    double income = section.getDouble("income", 0.0);
                    double experience = section.getDouble("experience", 0.0);
                    jobInfo.add(new JobInfo(type + subType, income, incomeEquation, experience, expEquation));
                }
            }
            job.setJobInfo(actionType, jobInfo);
        }
        if (jobKey.equalsIgnoreCase("none")) {
            Jobs.setNoneJob(job);
        } else {
            jobs.add(job);
        }
    }
    try {
        conf.save(f);
    } catch (IOException e) {
        e.printStackTrace();
    }
}
Also used : ActionType(com.gamingmesh.jobs.container.ActionType) ArrayList(java.util.ArrayList) YamlConfiguration(org.bukkit.configuration.file.YamlConfiguration) JobInfo(com.gamingmesh.jobs.container.JobInfo) DisplayMethod(com.gamingmesh.jobs.container.DisplayMethod) Job(com.gamingmesh.jobs.container.Job) JobPermission(com.gamingmesh.jobs.container.JobPermission) Material(org.bukkit.Material) IOException(java.io.IOException) IOException(java.io.IOException) Parser(com.gamingmesh.jobs.resources.jfep.Parser) EntityType(org.bukkit.entity.EntityType) File(java.io.File) ChatColor(com.gamingmesh.jobs.util.ChatColor) ConfigurationSection(org.bukkit.configuration.ConfigurationSection)

Aggregations

JobInfo (com.gamingmesh.jobs.container.JobInfo)3 ActionType (com.gamingmesh.jobs.container.ActionType)2 ChatColor (com.gamingmesh.jobs.util.ChatColor)2 DisplayMethod (com.gamingmesh.jobs.container.DisplayMethod)1 Job (com.gamingmesh.jobs.container.Job)1 JobPermission (com.gamingmesh.jobs.container.JobPermission)1 JobProgression (com.gamingmesh.jobs.container.JobProgression)1 Parser (com.gamingmesh.jobs.resources.jfep.Parser)1 File (java.io.File)1 IOException (java.io.IOException)1 ArrayList (java.util.ArrayList)1 Material (org.bukkit.Material)1 ConfigurationSection (org.bukkit.configuration.ConfigurationSection)1 YamlConfiguration (org.bukkit.configuration.file.YamlConfiguration)1 EntityType (org.bukkit.entity.EntityType)1