2015-08-21 15:10:08 +02:00
/ * *
* Jobs Plugin for Bukkit
* Copyright ( C ) 2011 Zak Ford < zak . j . ford @gmail.com >
*
* This program is free software : you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation , either version 3 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program . If not , see < http : //www.gnu.org/licenses/>.
* /
package com.gamingmesh.jobs.config ;
import java.io.File ;
import java.io.FileInputStream ;
import java.io.IOException ;
import java.io.InputStreamReader ;
import java.util.ArrayList ;
2016-01-09 13:58:33 +01:00
import java.util.HashMap ;
2015-08-21 15:10:08 +02:00
import java.util.List ;
import org.apache.commons.lang.StringEscapeUtils ;
import org.bukkit.Bukkit ;
import org.bukkit.Material ;
import org.bukkit.configuration.ConfigurationSection ;
import org.bukkit.configuration.file.YamlConfiguration ;
import org.bukkit.enchantments.Enchantment ;
import org.bukkit.entity.EntityType ;
import org.bukkit.inventory.ItemStack ;
import com.gamingmesh.jobs.Jobs ;
import com.gamingmesh.jobs.JobsPlugin ;
import com.gamingmesh.jobs.container.ActionType ;
import com.gamingmesh.jobs.container.DisplayMethod ;
import com.gamingmesh.jobs.container.Job ;
import com.gamingmesh.jobs.container.JobCommands ;
2015-09-17 09:48:10 +02:00
import com.gamingmesh.jobs.container.JobConditions ;
2015-08-21 15:10:08 +02:00
import com.gamingmesh.jobs.container.JobInfo ;
import com.gamingmesh.jobs.container.JobItems ;
2016-01-09 13:58:33 +01:00
import com.gamingmesh.jobs.container.JobLimitedItems ;
2015-08-21 15:10:08 +02:00
import com.gamingmesh.jobs.container.JobPermission ;
import com.gamingmesh.jobs.resources.jfep.Parser ;
import com.gamingmesh.jobs.stuff.ChatColor ;
public class JobConfig {
2015-09-17 09:48:10 +02:00
private JobsPlugin plugin ;
public JobConfig ( JobsPlugin plugin ) {
this . plugin = plugin ;
}
public void reload ( ) throws IOException {
// job settings
loadJobSettings ( ) ;
}
/ * *
* Method to load the jobs configuration
*
* loads from Jobs / jobConfig . yml
* @throws IOException
* /
@SuppressWarnings ( " deprecation " )
private void loadJobSettings ( ) throws IOException {
File f = new File ( plugin . getDataFolder ( ) , " jobConfig.yml " ) ;
InputStreamReader s = new InputStreamReader ( new FileInputStream ( f ) , " UTF-8 " ) ;
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! " ) ;
s . close ( ) ;
return ;
}
2015-08-21 15:10:08 +02:00
}
2015-09-17 09:48:10 +02:00
YamlConfiguration conf = new YamlConfiguration ( ) ;
conf . options ( ) . pathSeparator ( '/' ) ;
try {
conf . load ( s ) ;
s . close ( ) ;
} 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 ;
2015-08-21 15:10:08 +02:00
}
2015-09-17 09:48:10 +02:00
//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/bukkit-plugins/jobs-reborn/.").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 " ) ;
// Translating unicode
jobName = StringEscapeUtils . unescapeJava ( jobName ) ;
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 ;
int vipmaxLevel = jobSection . getInt ( " vip-max-level " , 0 ) ;
if ( vipmaxLevel < 0 )
vipmaxLevel = 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 = org . bukkit . ChatColor . translateAlternateColorCodes ( '&' , 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! " ) ;
2015-08-21 15:10:08 +02:00
}
2015-09-17 09:48:10 +02:00
}
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 ;
}
// Gui item
ItemStack GUIitem = new ItemStack ( Material . getMaterial ( 35 ) , 1 , ( byte ) 13 ) ;
if ( jobSection . contains ( " Gui " ) ) {
ConfigurationSection guiSection = jobSection . getConfigurationSection ( " Gui " ) ;
if ( guiSection . contains ( " Id " ) & & guiSection . contains ( " Data " ) & & guiSection . isInt ( " Id " ) & & guiSection . isInt ( " Data " ) ) {
GUIitem = new ItemStack ( Material . getMaterial ( guiSection . getInt ( " Id " ) ) , 1 , ( byte ) guiSection . getInt ( " Data " ) ) ;
} else
Jobs . getPluginLogger ( ) . warning ( " Job " + jobKey + " has an invalid Gui property. Please fix this if you want to use it! " ) ;
}
// 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 ) ) ;
2015-08-21 15:10:08 +02:00
}
2015-09-17 09:48:10 +02:00
}
// Conditions
ArrayList < JobConditions > jobConditions = new ArrayList < JobConditions > ( ) ;
ConfigurationSection conditionsSection = jobSection . getConfigurationSection ( " conditions " ) ;
if ( conditionsSection ! = null ) {
for ( String ConditionKey : conditionsSection . getKeys ( false ) ) {
ConfigurationSection permissionSection = conditionsSection . getConfigurationSection ( ConditionKey ) ;
String node = ConditionKey . toLowerCase ( ) ;
if ( permissionSection = = null ) {
Jobs . getPluginLogger ( ) . warning ( " Job " + jobKey + " has an invalid condition key " + ConditionKey + " ! " ) ;
continue ;
}
if ( ! permissionSection . contains ( " requires " ) | | ! permissionSection . contains ( " perform " ) ) {
Jobs . getPluginLogger ( ) . warning ( " Job " + jobKey + " has an invalid condition requirement " + ConditionKey + " ! " ) ;
continue ;
}
List < String > requires = permissionSection . getStringList ( " requires " ) ;
List < String > perform = permissionSection . getStringList ( " perform " ) ;
jobConditions . add ( new JobConditions ( node , requires , perform ) ) ;
}
}
// Command on leave
List < String > JobsCommandOnLeave = new ArrayList < String > ( ) ;
if ( jobSection . isList ( " cmd-on-leave " ) ) {
JobsCommandOnLeave = jobSection . getStringList ( " cmd-on-leave " ) ;
}
// Command on join
List < String > JobsCommandOnJoin = new ArrayList < String > ( ) ;
if ( jobSection . isList ( " cmd-on-join " ) ) {
JobsCommandOnJoin = jobSection . getStringList ( " cmd-on-join " ) ;
}
// Commands
ArrayList < JobCommands > jobCommand = new ArrayList < JobCommands > ( ) ;
ConfigurationSection commandsSection = jobSection . getConfigurationSection ( " commands " ) ;
if ( commandsSection ! = null ) {
for ( String commandKey : commandsSection . getKeys ( false ) ) {
ConfigurationSection commandSection = commandsSection . getConfigurationSection ( commandKey ) ;
String node = commandKey . toLowerCase ( ) ;
if ( commandSection = = null ) {
Jobs . getPluginLogger ( ) . warning ( " Job " + jobKey + " has an invalid command key " + commandKey + " ! " ) ;
continue ;
}
String command = commandSection . getString ( " command " ) ;
int levelFrom = commandSection . getInt ( " levelFrom " ) ;
int levelUntil = commandSection . getInt ( " levelUntil " ) ;
jobCommand . add ( new JobCommands ( node , command , levelFrom , levelUntil ) ) ;
}
}
// Items
ArrayList < JobItems > jobItems = new ArrayList < JobItems > ( ) ;
ConfigurationSection itemsSection = jobSection . getConfigurationSection ( " items " ) ;
if ( itemsSection ! = null ) {
for ( String itemKey : itemsSection . getKeys ( false ) ) {
ConfigurationSection itemSection = itemsSection . getConfigurationSection ( itemKey ) ;
String node = itemKey . toLowerCase ( ) ;
if ( itemSection = = null ) {
Jobs . getPluginLogger ( ) . warning ( " Job " + jobKey + " has an invalid item key " + itemKey + " ! " ) ;
continue ;
}
int id = itemSection . getInt ( " id " ) ;
2016-01-09 13:58:33 +01:00
String name = null ;
if ( itemSection . isString ( " name " ) )
name = itemSection . getString ( " name " ) ;
2015-09-17 09:48:10 +02:00
List < String > lore = new ArrayList < String > ( ) ;
2016-01-09 13:58:33 +01:00
if ( itemSection . getStringList ( " lore " ) ! = null )
for ( String eachLine : itemSection . getStringList ( " lore " ) ) {
lore . add ( org . bukkit . ChatColor . translateAlternateColorCodes ( '&' , eachLine ) ) ;
}
2015-09-17 09:48:10 +02:00
2016-01-09 13:58:33 +01:00
HashMap < Enchantment , Integer > enchants = new HashMap < Enchantment , Integer > ( ) ;
2015-09-17 09:48:10 +02:00
if ( itemSection . getStringList ( " enchants " ) ! = null )
for ( String eachLine : itemSection . getStringList ( " enchants " ) ) {
2016-01-09 13:58:33 +01:00
if ( ! eachLine . contains ( " = " ) )
continue ;
Enchantment ench = Enchantment . getByName ( eachLine . split ( " = " ) [ 0 ] ) ;
Integer level = - 1 ;
try {
level = Integer . parseInt ( eachLine . split ( " = " ) [ 1 ] ) ;
} catch ( NumberFormatException e ) {
continue ;
}
if ( ench ! = null & & level ! = - 1 )
enchants . put ( ench , level ) ;
2015-08-21 15:10:08 +02:00
}
2015-09-17 09:48:10 +02:00
Double moneyBoost = itemSection . getDouble ( " moneyBoost " ) ;
Double expBoost = itemSection . getDouble ( " expBoost " ) ;
jobItems . add ( new JobItems ( node , id , name , lore , enchants , moneyBoost , expBoost ) ) ;
}
}
2016-01-09 13:58:33 +01:00
// Limited Items
ArrayList < JobLimitedItems > jobLimitedItems = new ArrayList < JobLimitedItems > ( ) ;
ConfigurationSection LimitedItemsSection = jobSection . getConfigurationSection ( " limitedItems " ) ;
if ( LimitedItemsSection ! = null ) {
for ( String itemKey : LimitedItemsSection . getKeys ( false ) ) {
ConfigurationSection itemSection = LimitedItemsSection . getConfigurationSection ( itemKey ) ;
String node = itemKey . toLowerCase ( ) ;
if ( itemSection = = null ) {
Jobs . getPluginLogger ( ) . warning ( " Job " + jobKey + " has an invalid item key " + itemKey + " ! " ) ;
continue ;
}
int id = itemSection . getInt ( " id " ) ;
String name = null ;
if ( itemSection . isString ( " name " ) )
name = itemSection . getString ( " name " ) ;
List < String > lore = new ArrayList < String > ( ) ;
if ( itemSection . getStringList ( " lore " ) ! = null )
for ( String eachLine : itemSection . getStringList ( " lore " ) ) {
lore . add ( org . bukkit . ChatColor . translateAlternateColorCodes ( '&' , eachLine ) ) ;
}
HashMap < Enchantment , Integer > enchants = new HashMap < Enchantment , Integer > ( ) ;
if ( itemSection . getStringList ( " enchants " ) ! = null )
for ( String eachLine : itemSection . getStringList ( " enchants " ) ) {
if ( ! eachLine . contains ( " = " ) )
continue ;
Enchantment ench = Enchantment . getByName ( eachLine . split ( " = " ) [ 0 ] ) ;
Integer level = - 1 ;
try {
level = Integer . parseInt ( eachLine . split ( " = " ) [ 1 ] ) ;
} catch ( NumberFormatException e ) {
continue ;
}
if ( ench ! = null & & level ! = - 1 )
enchants . put ( ench , level ) ;
}
int level = itemSection . getInt ( " level " ) ;
jobLimitedItems . add ( new JobLimitedItems ( node , id , name , lore , enchants , level ) ) ;
}
}
2015-09-17 09:48:10 +02:00
Job job = new Job ( jobName , jobShortName , description , color , maxExpEquation , displayMethod , maxLevel , vipmaxLevel , maxSlots , jobPermissions , jobCommand ,
2016-01-09 13:58:33 +01:00
jobConditions , jobItems , jobLimitedItems , JobsCommandOnJoin , JobsCommandOnLeave , GUIitem ) ;
2015-09-17 09:48:10 +02:00
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 ;
String type = null ;
String subType = " " ;
String meta = " " ;
int id = 0 ;
if ( myKey . contains ( " - " ) ) {
// uses subType
subType = " : " + myKey . split ( " - " ) [ 1 ] ;
meta = myKey . split ( " - " ) [ 1 ] ;
myKey = myKey . split ( " - " ) [ 0 ] ;
2015-08-21 15:10:08 +02:00
}
2015-09-17 09:48:10 +02:00
Material material = Material . matchMaterial ( myKey ) ;
if ( material = = null )
material = Material . getMaterial ( myKey . replace ( " " , " _ " ) . toUpperCase ( ) ) ;
if ( material = = null ) {
// try integer method
Integer matId = null ;
try {
matId = Integer . valueOf ( myKey ) ;
} catch ( NumberFormatException e ) {
}
if ( matId ! = null ) {
material = Material . getMaterial ( matId ) ;
if ( material ! = null ) {
Jobs . getPluginLogger ( ) . warning ( " Job " + jobKey + " " + actionType . getName ( ) + " is using ID: " + key + " ! " ) ;
Jobs . getPluginLogger ( ) . warning ( " Please use the Material name instead: " + material . toString ( ) + " ! " ) ;
2015-08-21 15:10:08 +02:00
}
2015-09-17 09:48:10 +02:00
}
2015-08-21 15:10:08 +02:00
}
2016-01-09 13:58:33 +01:00
if ( actionType = = ActionType . EXPLORE )
material = null ;
2015-09-17 09:48:10 +02:00
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 ;
2015-08-21 15:10:08 +02:00
}
2015-09-17 09:48:10 +02:00
}
// START HACK
/ *
* 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 & & actionType = = ActionType . BREAK ) {
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 ( ) ;
id = material . getId ( ) ;
} else if ( actionType = = ActionType . KILL | | actionType = = ActionType . TAME | | actionType = = ActionType . BREED | | actionType = = ActionType . MILK ) {
// check entities
EntityType entity = EntityType . fromName ( key ) ;
if ( entity = = null ) {
try {
entity = EntityType . valueOf ( key . toUpperCase ( ) ) ;
} catch ( IllegalArgumentException e ) {
2015-08-21 15:10:08 +02:00
}
2015-09-17 09:48:10 +02:00
}
if ( entity ! = null & & entity . isAlive ( ) ) {
type = entity . toString ( ) ;
id = entity . getTypeId ( ) ;
}
// Just to recognize wither skeleton
if ( key . equalsIgnoreCase ( " WitherSkeleton " ) ) {
type = " WitherSkeleton " ;
id = 51 ;
meta = " 1 " ;
}
// Just to recognize Zombie Villager
if ( key . equalsIgnoreCase ( " ZombieVillager " ) ) {
type = " ZombieVillager " ;
id = 54 ;
meta = " 1 " ;
}
// Just to recognize Elder Guardian
if ( key . equalsIgnoreCase ( " ElderGuardian " ) ) {
type = " ElderGuardian " ;
id = 68 ;
meta = " 1 " ;
}
} else if ( actionType = = ActionType . ENCHANT & & material = = null ) {
Enchantment enchant = Enchantment . getByName ( myKey ) ;
if ( enchant ! = null )
id = enchant . getId ( ) ;
type = myKey ;
2015-11-26 14:10:26 +01:00
} else if ( actionType = = ActionType . CUSTOMKILL | | actionType = = ActionType . SHEAR | | actionType = = ActionType . MMKILL ) {
2015-09-17 09:48:10 +02:00
type = myKey ;
2016-01-09 13:58:33 +01:00
} else if ( actionType = = ActionType . EXPLORE ) {
type = myKey ;
int amount = 10 ;
try {
amount = Integer . valueOf ( myKey ) ;
} catch ( NumberFormatException e ) {
Jobs . getPluginLogger ( ) . warning ( " Job " + jobKey + " has an invalid " + actionType . getName ( ) + " type property: " + key + " ! " ) ;
continue ;
}
Jobs . getExplore ( ) . setExploreEnabled ( ) ;
Jobs . getExplore ( ) . setPlayerAmount ( amount + 1 ) ;
2015-08-21 15:10:08 +02:00
}
2015-09-17 09:48:10 +02:00
if ( type = = null ) {
Jobs . getPluginLogger ( ) . warning ( " Job " + jobKey + " has an invalid " + actionType . getName ( ) + " type property: " + key + " ! " ) ;
continue ;
2015-08-21 15:10:08 +02:00
}
2015-09-17 09:48:10 +02:00
double income = section . getDouble ( " income " , 0 . 0 ) ;
double experience = section . getDouble ( " experience " , 0 . 0 ) ;
2015-08-21 15:10:08 +02:00
2015-09-17 09:48:10 +02:00
jobInfo . add ( new JobInfo ( actionType , id , meta , type + subType , income , incomeEquation , experience , expEquation ) ) ;
}
2015-08-21 15:10:08 +02:00
}
2015-09-17 09:48:10 +02:00
job . setJobInfo ( actionType , jobInfo ) ;
}
if ( jobKey . equalsIgnoreCase ( " none " ) ) {
Jobs . setNoneJob ( job ) ;
} else {
jobs . add ( job ) ;
}
2015-08-21 15:10:08 +02:00
}
2015-09-17 09:48:10 +02:00
//try {
// conf.save(f);
//} catch (IOException e) {
// e.printStackTrace();
//}
}
2015-08-21 15:10:08 +02:00
}