First Commit. Initial Development.

AlexBranch
Joshua Sigona 10 years ago
commit f36de77761
  1. 13
      SigJobs/java/org/sig/jobs/BlockBreakHandler.java
  2. 123
      SigJobs/java/org/sig/jobs/Commands/JobsCommandHandler.java
  3. 46
      SigJobs/java/org/sig/jobs/Commands/MoneyCommandHandler.java
  4. 27
      SigJobs/java/org/sig/jobs/EntityHandler.java
  5. 252
      SigJobs/java/org/sig/jobs/Jobs.java
  6. 380
      SigJobs/java/org/sig/jobs/main.java

@ -0,0 +1,13 @@
package org.sig.jobs;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.EnumChatFormatting;
import net.minecraftforge.event.world.BlockEvent.BreakEvent;
public class BlockBreakHandler {
@SubscribeEvent
public void onBlockBreak(BreakEvent ev) {
//ev.getPlayer().addChatComponentMessage(new ChatComponentText(EnumChatFormatting.GOLD+"You broke a block!"));
}
}

@ -0,0 +1,123 @@
package org.sig.jobs.Commands;
import org.sig.jobs.Jobs;
import org.sig.jobs.main;
import net.minecraft.command.CommandBase;
import net.minecraft.command.ICommandSender;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.EnumChatFormatting;
public class JobsCommandHandler extends CommandBase {
@Override
public String getCommandName() {
// TODO Auto-generated method stub
return "jobs";
}
@Override
public String getCommandUsage(ICommandSender p) {
// TODO Auto-generated method stub
return "/jobs help - Displays a list of job commands.";
}
@Override
public boolean canCommandSenderUseCommand(ICommandSender p) {
if (p instanceof EntityPlayer) {
return true; //If we are a player, regardless of permissions, we can use this.
}
return false; //By default we should return false.
}
void UnknownCommand(EntityPlayer p) {
p.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.RED+"Unknown command. Please type "+EnumChatFormatting.GREEN+"/jobs help"+EnumChatFormatting.RED+" for more information."));
}
@Override
public void processCommand(ICommandSender p, String[] msg) {
// TODO Auto-generated method stub
if (p instanceof EntityPlayer) {
EntityPlayer pl = (EntityPlayer)p;
/*// /jobs test multiple args RETURNS 0:test 1:multiple 2:args
*
* for (int i=0;i<msg.length;i++) {
pl.addChatComponentMessage(new ChatComponentText(i+"|"+msg[i]));
}*/
switch (msg.length) {
case 0:{
pl.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.BOLD+"List of Jobs:"));
for (int i=0;i<main.JOBS.length;i+=2) {
pl.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.getValueByName(main.JOBS[i])+"("+main.JOBLIMIT[i/2]+"/"+Jobs.getMaxJobMembers()+")"+main.JOBS[i+1]));
}
}break;
case 1:{
switch (msg[0]) {
case "join": {
//Display help message for joining.
pl.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.GREEN+"/jobs join <job>"+EnumChatFormatting.RESET+" - Join a job."));
pl.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.ITALIC+""+EnumChatFormatting.GRAY+" See a list of jobs by typing "+EnumChatFormatting.GREEN+"/jobs"+EnumChatFormatting.GRAY+"."));
}break;
case "leave": {
//Display help message for leaving.
pl.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.GREEN+"/jobs leave <job>"+EnumChatFormatting.RESET+" - Leave a job."));
pl.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.ITALIC+""+EnumChatFormatting.GRAY+" See a list of jobs by typing "+EnumChatFormatting.GREEN+"/jobs"+EnumChatFormatting.GRAY+"."));
}break;
case "info":{
//Display help message for job info.
pl.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.GREEN+"/jobs info <job>"+EnumChatFormatting.RESET+" - Displays more information about a job."));
pl.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.ITALIC+""+EnumChatFormatting.GRAY+" See a list of jobs by typing "+EnumChatFormatting.GREEN+"/jobs"+EnumChatFormatting.GRAY+"."));
}break;
case "help": {
//Displays the list of commands for jobs.
pl.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.BOLD+"List of Commands:"));
pl.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.GREEN+"/jobs "+EnumChatFormatting.RESET+"- Displays a list of jobs."));
pl.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.GREEN+"/jobs help "+EnumChatFormatting.RESET+"- Displays this list of commands."));
pl.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.GREEN+"/jobs info <job> "+EnumChatFormatting.RESET+"- Displays more information about a job."));
pl.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.GREEN+"/jobs list "+EnumChatFormatting.RESET+"- Displays a list of the jobs you are in."));
pl.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.GREEN+"/jobs join <job> "+EnumChatFormatting.RESET+"- Join a certain job."));
pl.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.GREEN+"/jobs leave <job> "+EnumChatFormatting.RESET+"- Leave a certain job."));
}break;
case "list": {
//Lists the jobs you are currently in.
pl.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.BOLD+"Current Jobs:"));
for (int i=0;i<main.MAX_JOBS;i++) {
if (!pl.getEntityData().getString("job"+(i+1)).equalsIgnoreCase("")) {
//This is a valid job. Display data for it.
pl.addChatComponentMessage(new ChatComponentText("Lv"+pl.getEntityData().getInteger("joblv"+(i+1))+" "+Jobs.getJobColor(pl.getEntityData().getString("job"+(i+1)))+Jobs.getJobName(pl.getEntityData().getString("job"+(i+1)))+EnumChatFormatting.RESET+" "+pl.getEntityData().getInteger("jobexp"+(i+1))+"/"+Jobs.getExpRequirement(pl.getEntityData().getInteger("joblv"+(i+1)))+"xp"));
}
}
}break;
default: {
UnknownCommand(pl);
}
}
}break;
case 2:{
switch (msg[0]) {
case "join": {
//Attempt to join this job.
Jobs.addJob(msg[1], pl);
}break;
case "leave": {
//Attempt to leave this job.
Jobs.removeJob(msg[1], pl);
}break;
case "info": {
//Display more info about this job.
}break;
default: {
}
}
}break;
default: {
UnknownCommand(pl);
}
}
}
}
}

@ -0,0 +1,46 @@
package org.sig.jobs.Commands;
import java.text.NumberFormat;
import net.minecraft.command.CommandBase;
import net.minecraft.command.ICommandSender;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.EnumChatFormatting;
public class MoneyCommandHandler extends CommandBase {
@Override
public String getCommandName() {
// TODO Auto-generated method stub
return "money";
}
@Override
public String getCommandUsage(ICommandSender p) {
// TODO Auto-generated method stub
return "/money - Returns how much money the Player is holding.";
}
@Override
public void processCommand(ICommandSender p, String[] msg) {
// TODO Auto-generated method stub
if (p instanceof EntityPlayer) {
EntityPlayer pl = (EntityPlayer) p;
NumberFormat money_format = NumberFormat.getInstance();
pl.addChatComponentMessage(new ChatComponentText("Currently Holding: "+EnumChatFormatting.GREEN+"$"+money_format.format(pl.getEntityData().getFloat("money"))));
}
}
@Override
public boolean canCommandSenderUseCommand(ICommandSender p) {
if (p instanceof EntityPlayer) {
return true; //Allow all players to use this command.
}
return false;
}
}

@ -0,0 +1,27 @@
package org.sig.jobs;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraftforge.event.entity.EntityJoinWorldEvent;
public class EntityHandler {
@SubscribeEvent
public void onPlayerJoin(EntityJoinWorldEvent ev) {
if (ev.entity instanceof EntityPlayer) {
EntityPlayer p = (EntityPlayer)ev.entity;
//Initialize money amount if this player does not have money.
if (!p.getEntityData().hasKey("money")) {
p.getEntityData().setDouble("money", main.STARTMONEY); //Start off with $100.
}
//Initialize jobs.
for (int i=0;i<main.MAX_JOBS;i++) {
if (!p.getEntityData().hasKey("job"+(i+1))) {
System.out.println("Player "+p.getUniqueID()+" does not have data. Writing new data.");
p.getEntityData().setString("job"+(i+1), "");
p.getEntityData().setInteger("joblv"+(i+1), 1);
p.getEntityData().setInteger("jobexp"+(i+1), 0);
}
}
}
}
}

@ -0,0 +1,252 @@
package org.sig.jobs;
import java.util.List;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.EnumChatFormatting;
/* Jobs class.
*
* Contains all helper functions related to jobs. Adding/removal/rewarding/checking of Jobs.
*/
public class Jobs {
/**
* Returns whether or not the string provided is a valid job.
* @param job The name of the job. (Case-insensitive)
* @return
*/
public static boolean isValidJob(String job) {
for (int i=0;i<main.JOBS.length;i+=2) {
//System.out.println("Comparing "+job.toLowerCase()+"|"+main.JOBS[i+1].toLowerCase()+"|");
if (job.equalsIgnoreCase(main.JOBS[i+1])) {
//System.console().printf("Comparing %s|%s|",job.toLowerCase(),main.JOBS[i+1].toLowerCase());
return true;
}
}
return false;
}
/**
* Gets the proper name of this job. (With correct capitalization.)
* @param job The name of the job.
* @return
*/
public static String getJobName(String job) {
for (int i=0;i<main.JOBS.length;i+=2) {
//System.out.println("Comparing "+job.toLowerCase()+"|"+main.JOBS[i+1].toLowerCase()+"|");
if (job.equalsIgnoreCase(main.JOBS[i+1])) {
//System.console().printf("Comparing %s|%s|",job.toLowerCase(),main.JOBS[i+1].toLowerCase());
return main.JOBS[i+1];
}
}
return "";
}
/**
* Gets the proper name of this job. (With correct capitalization.)
* @param id The ID number of the job.
* @return
*/
public static String getJobName(int id) {
return main.JOBS[id+1];
}
/**
* Returns the color of the specified job.
* @param job The name of the job. (Case insensitive)
* @return
*/
public static EnumChatFormatting getJobColor(String job) {
for (int i=0;i<main.JOBS.length;i+=2) {
//System.out.println("Comparing "+job.toLowerCase()+"|"+main.JOBS[i+1].toLowerCase()+"|");
if (job.equalsIgnoreCase(main.JOBS[i+1])) {
//System.console().printf("Comparing %s|%s|",job.toLowerCase(),main.JOBS[i+1].toLowerCase());
return EnumChatFormatting.getValueByName(main.JOBS[i]);
}
}
return EnumChatFormatting.WHITE;
}
/**
* Returns the color of the specified job.
* @param id The id number of the job.
* @return
*/
public static EnumChatFormatting getJobColor(int id) {
return EnumChatFormatting.getValueByName(main.JOBS[id]);
}
/**
* Returns the numberical value of a job.
* @param job The name of the job. (Case-insensitive)
* @return
*/
public static int getJobID(String job) {
if (isValidJob(job)) {
for (int i=0;i<main.JOBS.length;i+=2) {
if (job.equalsIgnoreCase(main.JOBS[i+1])) {
return i/2;
}
}
}
return -1; //We should never return this.
}
/**
* Get maximum amount of members allowed in a job.
* @return
*/
public static int getMaxJobMembers() {
//Returns the number of players that may occupy one job. Based on total players registered on the server.
String[] players = MinecraftServer.getServer().getConfigurationManager().getAvailablePlayerDat(); //Gets the total number of players on the server.
return (int) (Math.floor(players.length/10)+1); //Offer some wiggle room as we do not necessarily need everyone to occupy all slots.
}
/**
* Checks if the job requested is already filled up.
* @param job The name of the job. (Case-insensitive)
* @return
*/
public static boolean isJobFull(String job) {
if (main.JOBLIMIT[getJobID(job)]<getMaxJobMembers()) {
return false;
}
return true;
}
/**
* Returns if the player is in this job.
* @param job The name of the job. (Case-insensitive)
* @param p The player entity.
* @return
*/
public static boolean PlayerInJob(String job, EntityPlayer p) {
for (int i=0;i<main.MAX_JOBS;i++) {
if (p.getEntityData().hasKey("job"+(i+1))) {
if (p.getEntityData().getString("job"+(i+1)).equalsIgnoreCase(job)) {
return true;
}
}
}
return false;
}
/**
* Returns true if the player is not filled up in jobs.
* @param p The player entity.
* @return
*/
public static boolean hasEmptyJobSlot(EntityPlayer p) {
for (int i=0;i<main.MAX_JOBS;i++) {
if (p.getEntityData().getString("job"+(i+1)).equalsIgnoreCase("")) {
return true;
}
}
return false;
}
/**
* Calculates the exp for a specified level based on config values.
* @param level The level to calculate exp for.
* @return
*/
public static int getExpRequirement(int level) {
int totalxp=0;
for (int i=0;i<level;i++) {
totalxp+=main.startexp+(main.baseexp*(level*main.expmult));
}
return totalxp;
}
/**
* Attempts to add the player to a job. Returns true if succeeded, or false on failure.
* Also notifies the player the reason that they could not be added to the job.
* @param job The name of the job. (Case-insensitive)
* @param p The player entity.
* @return
*/
public static boolean addJob(String job, EntityPlayer p) {
if (isValidJob(job)) {
//Check if job is full.
if (!isJobFull(job)) {
if (!PlayerInJob(job,p)) {
if (hasEmptyJobSlot(p)) {
//Then we can add this player.
//Find first empty slot.
for (int i=0;i<main.MAX_JOBS;i++) {
if (p.getEntityData().getString("job"+(i+1)).equalsIgnoreCase("")) {
//Found a slot. Add the job.
p.getEntityData().setString("job"+(i+1), job);
p.getEntityData().setInteger("joblv"+(i+1), 1);
p.getEntityData().setInteger("jobexp"+(i+1), 0);
main.JOBLIMIT[getJobID(job)]++;
List onlinePlayers = MinecraftServer.getServer().getEntityWorld().playerEntities;
for (int j=0;j<onlinePlayers.size();j++) {
EntityPlayer onlinep = (EntityPlayer)onlinePlayers.get(j);
onlinep.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.GOLD+p.getDisplayName()+""+EnumChatFormatting.WHITE+" has just joined the "+getJobColor(job)+getJobName(job)+EnumChatFormatting.RESET+" job!"));
}
return true;
}
}
} else {
p.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.RED+"You are already in too many jobs! (Limit: "+main.MAX_JOBS+") Please leave one first."));
return false;
}
} else {
p.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.RED+"You are already in this job!"));
return false;
}
} else {
p.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.RED+"The job you are trying to join is full!"));
return false;
}
} else {
p.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.RED+"The job you typed is not valid! Please try again."));
return false;
}
p.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.DARK_RED+"[FATAL ERROR]"+EnumChatFormatting.RED+" Failed for undocumented reason. Please report this to sigonasr2 ASAP."));
return false;
}
/**
* Attempts to remove a player from a job. Returns true if succeeded, false otherwise. The player will be told
* why it failed to remove them.
* @param job The name of the job. (Case-insensitive)
* @param p The player entity.
* @return
*/
public static boolean removeJob(String job, EntityPlayer p) {
if (isValidJob(job)) {
if (PlayerInJob(job, p)) {
//Find the job slot with the job.
for (int i=0;i<main.MAX_JOBS;i++) {
if (p.getEntityData().getString("job"+(i+1)).equalsIgnoreCase(job)) {
//Found a slot. Add the job.
p.getEntityData().setString("job"+(i+1), "");
p.getEntityData().setInteger("joblv"+(i+1), 1);
p.getEntityData().setInteger("jobexp"+(i+1), 0);
main.JOBLIMIT[getJobID(job)]--;
List onlinePlayers = MinecraftServer.getServer().getEntityWorld().playerEntities;
for (int j=0;j<onlinePlayers.size();j++) {
EntityPlayer onlinep = (EntityPlayer)onlinePlayers.get(j);
onlinep.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.GOLD+p.getDisplayName()+""+EnumChatFormatting.WHITE+" has left the "+getJobColor(job)+getJobName(job)+EnumChatFormatting.RESET+" job."));
}
return true;
}
}
} else {
p.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.RED+"You are not in this job!"));
return false;
}
} else {
p.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.RED+"The job you typed is not valid! Please try again."));
return false;
}
p.addChatComponentMessage(new ChatComponentText(EnumChatFormatting.DARK_RED+"[FATAL ERROR]"+EnumChatFormatting.RED+" Failed for undocumented reason. Please report this to sigonasr2 ASAP."));
return false;
}
}

@ -0,0 +1,380 @@
package org.sig.jobs;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.sig.jobs.Commands.JobsCommandHandler;
import org.sig.jobs.Commands.MoneyCommandHandler;
import net.minecraft.command.ICommandManager;
import net.minecraft.command.ServerCommandManager;
import net.minecraft.server.MinecraftServer;
import net.minecraft.util.EnumChatFormatting;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.config.Configuration;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.event.FMLInitializationEvent;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.event.FMLServerStartingEvent;
import cpw.mods.fml.common.event.FMLServerStoppingEvent;
@Mod(modid = main.MODID, version = main.VERSION)
public class main {
public static int MAX_JOBS = 3; //Maximum number of jobs players may join.
public static final String[] JOBS = {
"GOLD", "Blacksmith",
"DARK_GREEN", "Breeder",
"LIGHT_PURPLE", "Brewer",
"WHITE", "Builder",
"YELLOW", "Cook",
"GOLD", "Digger",
"DARK_BLUE", "Enchanter",
"WHITE", "Explorer",
"AQUA", "Fisherman",
"RED", "Hunter",
"GRAY", "Miner",
"DARK_RED", "Support",
"DARK_PURPLE", "Weaponsmith",
"GREEN", "Woodcutter"
};
public static double STARTMONEY = 100;
public static final String MODID = "SigJobs";
public static final String VERSION = "0.0.1";
public static int JOBMAXPLAYERS = 0; //The maximum amount of players that can occupy one job.
/*This is a factor of the total number of players that have played on the server.*/
public static int[] JOBLIMIT = { //Contains the number of members of each job.
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0
};
public static double expmult = 1.1f; //The exp growth rate per level.
public static int baseexp = 100; //The base exp growth rate per level.
public static int startexp = 100; //The starting exp requirement for a job.
public static List<String> JOB_INFO1;
public static List<String> JOB_STATINFO1;
public static List<String> JOB_INFO2;
public static List<String> JOB_STATINFO2;
public static List<String> JOB_INFO3;
public static List<String> JOB_STATINFO3;
public static List<String> JOB_INFO4;
public static List<String> JOB_STATINFO4;
public static List<String> JOB_INFO5;
public static List<String> JOB_STATINFO5;
public static List<String> JOB_INFO6;
public static List<String> JOB_STATINFO6;
public static List<String> JOB_INFO7;
public static List<String> JOB_STATINFO7;
public static List<String> JOB_INFO8;
public static List<String> JOB_STATINFO8;
public static List<String> JOB_INFO9;
public static List<String> JOB_STATINFO9;
public static List<String> JOB_INFO10;
public static List<String> JOB_STATINFO10;
public static List<String> JOB_INFO11;
public static List<String> JOB_STATINFO11;
public static List<String> JOB_INFO12;
public static List<String> JOB_STATINFO12;
public static List<String> JOB_INFO13;
public static List<String> JOB_STATINFO13;
public static List<String> JOB_INFO14;
public static List<String> JOB_STATINFO14;
@EventHandler
public void preInit(FMLPreInitializationEvent ev) {
JOB_INFO1 = new ArrayList<String>();
JOB_INFO1.add(EnumChatFormatting.GOLD+"Blacksmith");
JOB_INFO1.add("");
JOB_INFO1.add("A Blacksmith's job entails creating strong pieces of equipment for themselves and their teammates to venture out with. Blacksmiths embue their souls into the armor they create, adding bonuses to them others would not be able to obtain.");
JOB_INFO1.add("");
JOB_INFO1.add("CRAFT:");
JOB_INFO1.add("Leather Armor: +1xp per mat");
JOB_INFO1.add("Dyed Leather Armor: +1xp per mat");
JOB_INFO1.add("Iron Armor: +2xp per mat");
JOB_INFO1.add("Steel Armor: +3xp per mat");
JOB_INFO1.add("Diamond Armor: +4xp per mat");
JOB_INFO1.add("Enforced Leather Armor: +2xp per mat");
JOB_INFO1.add("Enforced Iron Armor: +10xp per mat");
JOB_INFO1.add("Enforced Diamond Armor: +20xp per mat");
JOB_INFO1.add("EnderDragon Armor: +100xp per mat");
JOB_INFO1.add("Wither Armor: +200xp per mat");
JOB_INFO1.add("REPAIR:");
JOB_INFO1.add("Repairing armor gives exp based on how worn it is.");
JOB_STATINFO1 = new ArrayList<String>();
JOB_STATINFO1.add("A Blacksmith gets cheaper repairs, cheaper crafting, and stronger armor.");
JOB_STATINFO1.add("");
JOB_STATINFO1.add("Lv3: -5% anvil cost");
JOB_STATINFO1.add("Lv5: Provides 'Protection II' on all crafted armor.");
JOB_STATINFO1.add("Lv8: -10% anvil cost");
JOB_STATINFO1.add("Lv10: Provides 'Regen I' to all crafted armor. (Improves health regeneration when worn.)");
JOB_STATINFO1.add("Lv13: -15% anvil cost");
JOB_STATINFO1.add("Lv15: Materials used for crafting have a 10% chance of being recycled.");
JOB_STATINFO1.add("Lv18: -20% anvil cost");
JOB_STATINFO1.add("Lv20: Provides 'Durability I' to all crafted armor. (Armor pieces last twice as long before breaking.)");
JOB_STATINFO1.add("Lv23: -25% anvil cost");
JOB_STATINFO1.add("Lv25: Enchantments from armor can be stored onto books for recombining.");
JOB_STATINFO1.add("Lv28: -30% anvil cost");
JOB_STATINFO1.add("Lv30: Provides 'Last Resort' to all crafted armor. (When armor breaks, it provides a temporary 40 HP shield.)");
JOB_STATINFO1.add("Lv33: -40% anvil cost");
JOB_STATINFO1.add("Lv35: Gain the ability to build 'enforced' armor, made with tanned leather;iron,gold,diamond blocks for extra damage reduction and 10x normal durability.");
JOB_STATINFO1.add("Lv38: -50% anvil cost");
JOB_STATINFO1.add("Lv40: Provides 'Protection VI', 'Regen II', 'Durability II' as upgrades on all crafted armor.");
JOB_INFO2 = new ArrayList<String>();
JOB_INFO2.add(EnumChatFormatting.DARK_GREEN+"Breeder");
JOB_INFO2.add("");
JOB_INFO2.add("A Breeder populates the world with many species of animals, ensuring their successful growth and preventing overpopulation.");
JOB_INFO2.add("");
JOB_INFO2.add("BREED:");
JOB_INFO2.add("Chicken: +2xp");
JOB_INFO2.add("Sheep: +2xp");
JOB_INFO2.add("Pig: +3xp");
JOB_INFO2.add("Cow: +3xp");
JOB_INFO2.add("Ocelote: +5xp");
JOB_INFO2.add("Wolf: +5xp");
JOB_INFO2.add("CONTROL:");
JOB_INFO2.add("A Breeder will get exp bonuses when multiplying animals in less dense areas, or unnatural areas. Example: An area with lots of pigs will score high breeding cows there.");
JOB_INFO2.add("");
JOB_INFO2.add("On the flip side, breeding too many of one type of animal in a space will reward less xp as the animals overcrowd one area of the world.");
JOB_STATINFO2 = new ArrayList<String>();
JOB_STATINFO2.add("A Breeder can absorb energy from the animals around them and get more benefits from them.");
JOB_STATINFO2.add("");
JOB_STATINFO2.add("Lv3: -1% damage taken per nearby animal");
JOB_STATINFO2.add("Lv5: Animals will sometimes produce twins when breeding.");
JOB_STATINFO2.add("Lv8: -3% damage taken per nearby animal");
JOB_STATINFO2.add("Lv10: Animals provide 5x the normal amount of drops.");
JOB_STATINFO2.add("Lv13: +1 HP per nearby animal");
JOB_STATINFO2.add("Lv15: Breeded animals will now have 4x their normal health.");
JOB_STATINFO2.add("Lv18: +1% damage dealt per nearby animal");
JOB_STATINFO2.add("Lv20: Right-clicking with a stick will command all nearby animals to move to where you are. (Hold wheat/carrots/seeds/fish/bones to have finer control over this behavior)");
JOB_STATINFO2.add("Lv23: +2 HP per nearby animal");
JOB_STATINFO2.add("Lv25: When nearby animals get hurt, they will heal much faster.");
JOB_STATINFO2.add("Lv28: -5% damage per nearby animal");
JOB_STATINFO2.add("Lv30: Breeding animals gives 5x more experience.");
JOB_STATINFO2.add("Lv33: +3 HP per nearby animal");
JOB_STATINFO2.add("Lv35: Setting down chests near animals will automatically consume the items inside and feed them.");
JOB_STATINFO2.add("Lv38: +3% damage dealt per nearby animal");
JOB_STATINFO2.add("Lv40: Allows you to turn animals into egg form for respawning by right-clicking them (with no item). Animals resummoned by Breeders have x10 normal health, 'Strength II', and 'Speed II'.");
JOB_INFO3 = new ArrayList<String>();
JOB_INFO3.add(EnumChatFormatting.DARK_GREEN+"Brewer");
JOB_INFO3.add("");
JOB_INFO3.add("A Brewer creates stronger and longer lasting potions, while also enabling them to sometimes savor potions for multiple uses.");
JOB_INFO3.add("");
JOB_INFO3.add("BREW:");
JOB_INFO3.add("All potions brewed give 1xp per potion. Reaching the redstone/glowstone stage will provide 5xp per potion.");
JOB_INFO3.add("BOILING:");
JOB_INFO3.add("By cooking potions in between brews, you can increase their power and duration greatly.");
JOB_INFO3.add("");
JOB_STATINFO3 = new ArrayList<String>();
JOB_STATINFO3.add("A Brewer gets increased combat stats when consuming potions.");
JOB_STATINFO3.add("");
JOB_STATINFO3.add("Lv3: +2% damage reduction per potion consumption (Lasts 5 min)");
JOB_STATINFO3.add("Lv5: Brewing potions in stands is twice as quick.");
JOB_STATINFO3.add("Lv8: +2 HP shield per potion consumption (Lasts 5 min)");
JOB_STATINFO3.add("Lv10: Potions will have 2 uses per potion before being discarded.");
JOB_STATINFO3.add("Lv13: +2% damage dealt per potion consumption (Lasts 5 min)");
JOB_STATINFO3.add("Lv15: When Mundane Potions are cooked, they turn into Splash Potions of Teleportation");
JOB_STATINFO3.add("Lv18: +4% damage reduction per potion consumption (Lasts 10 min)");
JOB_STATINFO3.add("Lv20: Potions brewed have twice the normal duration.");
JOB_STATINFO3.add("Lv23: +4 HP shield per potion consumption (Lasts 5 min)");
JOB_STATINFO3.add("Lv25: Potions will have 4 uses per potion before being discarded.");
JOB_STATINFO3.add("Lv28: +4% damage dealt per potion consumption (Lasts 5 min)");
JOB_STATINFO3.add("Lv30: When Thick Potions are cooked, they turn into Splash Potions of Shielding (+20 HP)");
JOB_STATINFO3.add("Lv33: +8% damage reduction per potion consumption (Lasts 5 min)");
JOB_STATINFO3.add("Lv35: Brewing stands instantly brew potions.");
JOB_STATINFO3.add("Lv38: +8 HP shield per potion consmption (Lasts 5 min)");
JOB_STATINFO3.add("Lv40: Potions brewed have 30 minute durations.");
JOB_INFO4 = new ArrayList<String>();
JOB_INFO4.add(EnumChatFormatting.WHITE+"Builder");
JOB_INFO4.add("");
JOB_INFO4.add("A Builder creates and designs structures with a variety of materials. Using richer materials nets morth building experience.");
JOB_INFO4.add("");
JOB_INFO4.add("BUILD:");
JOB_INFO4.add("Wood Types - 1xp");
JOB_INFO4.add("Stone Types - 1xp");
JOB_INFO4.add("Carpenter's - 2xp");
JOB_INFO4.add("Furnishings - 2xp");
JOB_INFO4.add("Microblocks - 2xp");
JOB_INFO4.add("Carpets - 2xp");
JOB_INFO4.add("Chiseled - 2xp");
JOB_INFO4.add("Redstone - 2xp");
JOB_INFO4.add("Lighting - 2xp");
JOB_INFO4.add("Metal Types - 4xp");
JOB_INFO4.add("");
JOB_INFO4.add("There are so many useful and interesting ways to build that listing and defining them all would be difficult. Just know that more unique materials will be rewarded greatly.");
JOB_STATINFO4 = new ArrayList<String>();
JOB_STATINFO4.add("A Builder is less susceptible to falls and can actually empower themselves with structures.");
JOB_STATINFO4.add("");
JOB_STATINFO4.add("Lv3: -10% Fall Damage");
JOB_STATINFO4.add("Lv5: When right-clicking enemies with blocks, uses them to deal damage. Damage varies based on material type.");
JOB_STATINFO4.add("Lv8: +4 HP shield when placing blocks (Lasts 10 seconds)");
JOB_STATINFO4.add("Lv10: Damage taken is reduced by 30% while building.");
JOB_STATINFO4.add("Lv13: -20% Fall Damage");
JOB_STATINFO4.add("Lv15: Gain 'Jump Boost IV' while building to build around easier.");
JOB_STATINFO4.add("Lv18: +8 HP shield when placing blocks (Lasts 10 seconds)");
JOB_STATINFO4.add("Lv20: When shift-right-clicking two of the same block, will attempt to fill them in a line for quick building.");
JOB_STATINFO4.add("Lv23: -30% Fall Damage");
JOB_STATINFO4.add("Lv25: Damage taken is reduced by 50% while building.");
JOB_STATINFO4.add("Lv28: +12 HP shield when placing blocks (Lasts 10 seconds)");
JOB_STATINFO4.add("Lv30: When shift-jump-right-clicking two of the same block, will attempt to rectangle fill them for quick building.");
JOB_STATINFO4.add("Lv33: -50% Fall Damage");
JOB_STATINFO4.add("Lv35: Placing a rectangular structure (up to 9x9) of material blocks nearby will give party members different effects. Iron: x2 Attack, Redstone: +30 HP, Lapis Lazuli: +50% Damage Reduction, Emerald Blocks: No Durability Loss, Diamond: No Knockback, All Debuffs get Removed Constantly");
JOB_STATINFO4.add("Lv38: +20 HP shield when placing blocks (Lasts 10 seconds)");
JOB_STATINFO4.add("Lv40: Gain the ability to fly temporarily when building. During flight you taken 75% less damage than normal.");
JOB_INFO5 = new ArrayList<String>();
JOB_INFO5.add(EnumChatFormatting.YELLOW+"Cook");
JOB_INFO5.add("");
JOB_INFO5.add("A Cook can create delicacies that have interesting effects beyond just keeping yourself full.");
JOB_INFO5.add("");
JOB_INFO5.add("COOK:");
JOB_INFO5.add("There are a large abundance of foods to create. Ones that have more steps and ingredients give much more than simpler recipes.");
JOB_INFO5.add("");
JOB_STATINFO5 = new ArrayList<String>();
JOB_STATINFO5.add("A cook can eat foods to influence party members with auras. Cooks are stronger with furnaces and food around them.");
JOB_STATINFO5.add("");
JOB_STATINFO5.add("Lv3: +1 damage dealt per nearby burning furnace.");
JOB_STATINFO5.add("Lv5: All foods cooks eat can be consumed instantly. Eating fish will increase maximum HP of nearby players by 20%");
JOB_STATINFO5.add("Lv8: +1% damage reduction for each stack of food held in your inventory");
JOB_STATINFO5.add("Lv10: Cooking foods will add 'Sweetness I', giving the eater a bonus 10 HP shield for 2 minutes.");
JOB_STATINFO5.add("Lv13: +2 damage dealt per nearby burning furnace.");
JOB_STATINFO5.add("Lv15: Fuel in furnaces last twice as long. Eating Chili Con Carne will decrease damage taken of nearby players by 20%");
JOB_STATINFO5.add("Lv18: +2% damage reduction for each stack of food held in your inventory");
JOB_STATINFO5.add("Lv20: Colored candies have various perks - Black: Movement Speed+10%, Red: Lifesteal+10%, Green: Poison Touch(2min), Brown: Attack Damage+10%, Purple: Jump Boost II, Cyan: Water Breathing, Light Gray: +10% Item Drops, Gray: Debuff Resistance (2min), Pink: +4 HP Heal, Lime: Take 2 HP to deal double damage next hit, Yellow: Saturation (2min), Purple: Regeneration I (5sec), Magenta, Orange: Absorption II (2min), White: Cuts HP in half to gain Strength II (30 sec)");
JOB_STATINFO5.add("Lv23: +3 damage dealt per nearby burning furnace.");
JOB_STATINFO5.add("Lv25: Throwing eggs at mobs deals 10 damage.");
JOB_STATINFO5.add("Lv28: +3% damage reduction for each stack of food held in your inventory");
JOB_STATINFO5.add("Lv30: Waters in a Bottle created by cooks will be blessed and provide healing (6 HP per bottle)");
JOB_STATINFO5.add("Lv33: +5 damage dealt per nearby burning furnace.");
JOB_STATINFO5.add("Lv35: Cooking foods will add bonus random effects (see candies) to all foods cooked.");
JOB_STATINFO5.add("Lv38: +5% damage reduction for each stack of food held in your inventory");
JOB_STATINFO5.add("Lv40: All foods cooked will provide full health heals when eaten and include a temporary 10 HP shield (30 sec).");
JOB_INFO6 = new ArrayList<String>();
JOB_INFO6.add(EnumChatFormatting.YELLOW+"Cook");
JOB_INFO6.add("");
JOB_INFO6.add("A Cook can create delicacies that have interesting effects beyond just keeping yourself full.");
JOB_INFO6.add("");
JOB_INFO6.add("COOK:");
JOB_INFO6.add("There are a large abundance of foods to create. Ones that have more steps and ingredients give much more than simpler recipes.");
JOB_INFO6.add("");
JOB_STATINFO6 = new ArrayList<String>();
JOB_STATINFO6.add("A cook can eat foods to influence party members with auras. Cooks are stronger with furnaces and food around them.");
JOB_STATINFO6.add("");
JOB_STATINFO6.add("Lv3: +1 damage dealt per nearby burning furnace.");
JOB_STATINFO6.add("Lv5: All foods cooks eat can be consumed instantly. Eating fish will increase maximum HP of nearby players by 20%");
JOB_STATINFO6.add("Lv8: +1% damage reduction for each stack of food held in your inventory");
JOB_STATINFO6.add("Lv10: Cooking foods will add 'Sweetness I', giving the eater a bonus 10 HP shield for 2 minutes.");
JOB_STATINFO6.add("Lv13: +2 damage dealt per nearby burning furnace.");
JOB_STATINFO6.add("Lv15: Fuel in furnaces last twice as long. Eating Chili Con Carne will decrease damage taken of nearby players by 20%");
JOB_STATINFO6.add("Lv18: +2% damage reduction for each stack of food held in your inventory");
JOB_STATINFO6.add("Lv20: Colored candies have various perks - Black: Movement Speed+10%, Red: Lifesteal+10%, Green: Poison Touch(2min), Brown: Attack Damage+10%, Purple: Jump Boost II, Cyan: Water Breathing, Light Gray: +10% Item Drops, Gray: Debuff Resistance (2min), Pink: +4 HP Heal, Lime: Take 2 HP to deal double damage next hit, Yellow: Saturation (2min), Purple: Regeneration I (5sec), Magenta, Orange: Absorption II (2min), White: Cuts HP in half to gain Strength II (30 sec)");
JOB_STATINFO6.add("Lv23: +3 damage dealt per nearby burning furnace.");
JOB_STATINFO6.add("Lv25: Throwing eggs at mobs deals 10 damage.");
JOB_STATINFO6.add("Lv28: +3% damage reduction for each stack of food held in your inventory");
JOB_STATINFO6.add("Lv30: Waters in a Bottle created by cooks will be blessed and provide healing (6 HP per bottle)");
JOB_STATINFO6.add("Lv33: +5 damage dealt per nearby burning furnace.");
JOB_STATINFO6.add("Lv35: Cooking foods will add bonus random effects (see candies) to all foods cooked.");
JOB_STATINFO6.add("Lv38: +5% damage reduction for each stack of food held in your inventory");
JOB_STATINFO6.add("Lv40: All foods cooked will provide full health heals when eaten and include a temporary 10 HP shield (30 sec).");
JOB_INFO14 = new ArrayList<String>();
JOB_INFO14.add(EnumChatFormatting.GREEN+"Woodcutter");
JOB_INFO14.add("");
JOB_INFO14.add("A Woodcutter's job includes cutting down trees, replacing them with saplings, and building items with the wood materials collected.");
JOB_INFO14.add("");
JOB_INFO14.add("CHOP:");
JOB_INFO14.add("-Logs +1xp");
JOB_INFO14.add("-Logs (w/axes) +3xp");
JOB_INFO14.add("PLACE:");
JOB_INFO14.add("-Planks +1xp");
JOB_INFO14.add("-Wooden Items +2xp");
JOB_INFO14.add("REPLANT:");
JOB_INFO14.add("-Saplings +1xp");
JOB_INFO14.add("-Bonemeal Trees +5xp");
JOB_INFO14.add("");
JOB_STATINFO14 = new ArrayList<String>();
JOB_STATINFO14.add("A Woodcutter gets increased defenses, higher jumps, and takes less damage on falls.");
JOB_STATINFO14.add("");
JOB_STATINFO14.add("Lv3: +5% damage reduction");
JOB_STATINFO14.add("Lv5: Gains 'Haste II' when cutting down trees.");
JOB_STATINFO14.add("Lv8: +30% jump height");
JOB_STATINFO14.add("Lv10: Chopping down trees sometimes yields golden apples.");
JOB_STATINFO14.add("Lv13: -50% fall damage");
JOB_STATINFO14.add("Lv15: Saplings placed down will only require one bonemeal to regrow.");
JOB_STATINFO14.add("Lv18: +10% damage reduction");
JOB_STATINFO14.add("Lv20: While cutting down logs, you can jump very high.");
JOB_STATINFO14.add("Lv23: +50% jump height");
JOB_STATINFO14.add("Lv25: Cutting down logs will yield 2-4 extra wooden planks.");
JOB_STATINFO14.add("Lv28: -80% fall damage");
JOB_STATINFO14.add("Lv30: Crafting recipes that consume logs or planks now recycle items 50% of the time.");
JOB_STATINFO14.add("Lv33: -15% damage reduction");
JOB_STATINFO14.add("Lv35: Cooking logs yields 1 coal block per log.");
JOB_STATINFO14.add("Lv38: -30% damage reduction");
JOB_STATINFO14.add("Lv40: Trees can be cut down in one click by right-clicking with an axe.");
Configuration config = new Configuration(new File("SigJobs.cfg"));
config.load(); //Create/load our config.
for (int i=0;i<JOBLIMIT.length;i++) {
JOBLIMIT[i]=config.get("SIGJOBS", "JOB"+i, 0).getInt();
}
STARTMONEY = (float) config.get("SIGJOBS", "STARTMONEY", STARTMONEY).getDouble();
MAX_JOBS = config.get("SIGJOBS","MAXJOBS",3).getInt();
expmult = config.get("SIGJOBS", "XPMULT", expmult).getDouble();
baseexp = config.get("SIGJOBS", "BASEXP", baseexp).getInt();
startexp = config.get("SIGJOBS", "STARTXP", startexp).getInt();
config.save(); //Save our config file.
}
@EventHandler
public void init(FMLInitializationEvent ev) {
MinecraftForge.EVENT_BUS.register(new BlockBreakHandler());
MinecraftForge.EVENT_BUS.register(new EntityHandler());
MinecraftForge.EVENT_BUS.register(new Jobs());
}
@EventHandler
public void serverStart(FMLServerStartingEvent ev) {
MinecraftServer server= ev.getServer();
ICommandManager commander = server.getCommandManager();
ServerCommandManager servmanager = (ServerCommandManager)commander;
servmanager.registerCommand(new JobsCommandHandler());
servmanager.registerCommand(new MoneyCommandHandler());
}
@EventHandler
public void serverClose(FMLServerStoppingEvent ev) {
//Server is shutting down. Save the configuration.
Configuration config = new Configuration(new File("SigJobs.cfg"));
for (int i=0;i<JOBLIMIT.length;i++) {
config.get("SIGJOBS", "JOB"+i, 0).set(JOBLIMIT[i]);
}
config.save();
}
}
Loading…
Cancel
Save