mcMMO.java 72 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448
  1. package com.gmail.nossr50;
  2. import com.gmail.nossr50.datatypes.Mob;
  3. import com.gmail.nossr50.datatypes.PlayerProfile;
  4. import com.gmail.nossr50.datatypes.SkillType;
  5. import com.gmail.nossr50.config.*;
  6. import com.gmail.nossr50.listeners.mcBlockListener;
  7. import com.gmail.nossr50.listeners.mcEntityListener;
  8. import com.gmail.nossr50.listeners.mcPlayerListener;
  9. import com.gmail.nossr50.locale.mcLocale;
  10. import com.gmail.nossr50.party.Party;
  11. import com.gmail.nossr50.skills.*;
  12. import com.nijikokun.bukkit.Permissions.Permissions;
  13. import org.bukkit.ChatColor;
  14. import org.bukkit.Location;
  15. import org.bukkit.Material;
  16. import java.io.BufferedOutputStream;
  17. import java.io.BufferedReader;
  18. import java.io.File;
  19. import java.io.FileOutputStream;
  20. import java.io.FileReader;
  21. import java.io.IOException;
  22. import java.io.InputStream;
  23. import java.io.OutputStream;
  24. import java.net.URL;
  25. import java.util.ArrayList;
  26. import java.util.HashMap;
  27. import java.util.Timer;
  28. import java.util.logging.Level;
  29. import java.util.logging.Logger;
  30. import org.bukkit.command.Command;
  31. import org.bukkit.command.CommandSender;
  32. import org.bukkit.event.Event.Priority;
  33. import org.bukkit.event.Event;
  34. import org.bukkit.plugin.PluginDescriptionFile;
  35. import org.bukkit.plugin.java.JavaPlugin;
  36. import org.bukkit.plugin.PluginManager;
  37. import org.bukkit.entity.Player;
  38. import org.bukkitcontrib.player.ContribCraftPlayer;
  39. import org.bukkitcontrib.player.ContribPlayer;
  40. public class mcMMO extends JavaPlugin
  41. {
  42. /*
  43. * I never expected mcMMO to get so popular!
  44. * Thanks for all the support for the mod
  45. * Thanks to the people who have worked on the code
  46. * Thanks to the donators who helped me out financially
  47. * Thanks to the server admins who use my mod :)
  48. *
  49. * This mod is open source, and its going to stay that way >:3
  50. *
  51. * Donate via paypal to nossr50@gmail.com (A million thanks to anyone that does!)
  52. */
  53. public static String maindirectory = "plugins" + File.separator + "mcMMO";
  54. File file = new File(maindirectory + File.separator + "config.yml");
  55. public static final Logger log = Logger.getLogger("Minecraft");
  56. private final mcPlayerListener playerListener = new mcPlayerListener(this);
  57. private final mcBlockListener blockListener = new mcBlockListener(this);
  58. private final mcEntityListener entityListener = new mcEntityListener(this);
  59. public static mcPermissions permissionHandler = new mcPermissions();
  60. private Permissions permissions;
  61. private Timer mcMMO_Timer = new Timer(true); //BLEED AND REGENERATION
  62. //private Timer mcMMO_SpellTimer = new Timer(true);
  63. public static Database database = null;
  64. public Mob mob = new Mob();
  65. public Misc misc = new Misc(this);
  66. public Sorcery sorcery = new Sorcery(this);
  67. //Config file stuff
  68. LoadProperties config = new LoadProperties();
  69. public void onEnable()
  70. {
  71. new File(maindirectory).mkdir();
  72. mcPermissions.initialize(getServer());
  73. config.configCheck();
  74. if(!LoadProperties.useMySQL)
  75. Users.getInstance().loadUsers(); //Load Users file
  76. /*
  77. * REGISTER EVENTS
  78. */
  79. PluginManager pm = getServer().getPluginManager();
  80. if(pm.getPlugin("BukkitContrib") != null)
  81. LoadProperties.contribEnabled = true;
  82. else
  83. LoadProperties.contribEnabled = false;
  84. //Player Stuff
  85. pm.registerEvent(Event.Type.PLAYER_QUIT, playerListener, Priority.Normal, this);
  86. pm.registerEvent(Event.Type.PLAYER_JOIN, playerListener, Priority.Normal, this);
  87. pm.registerEvent(Event.Type.PLAYER_LOGIN, playerListener, Priority.Normal, this);
  88. pm.registerEvent(Event.Type.PLAYER_CHAT, playerListener, Priority.Lowest, this);
  89. pm.registerEvent(Event.Type.PLAYER_INTERACT, playerListener, Priority.Monitor, this);
  90. pm.registerEvent(Event.Type.PLAYER_RESPAWN, playerListener, Priority.Normal, this);
  91. pm.registerEvent(Event.Type.PLAYER_PICKUP_ITEM, playerListener, Priority.Normal, this);
  92. //Block Stuff
  93. pm.registerEvent(Event.Type.BLOCK_DAMAGE, blockListener, Priority.Highest, this);
  94. pm.registerEvent(Event.Type.BLOCK_BREAK, blockListener, Priority.Highest, this);
  95. pm.registerEvent(Event.Type.BLOCK_FROMTO, blockListener, Priority.Normal, this);
  96. pm.registerEvent(Event.Type.BLOCK_PLACE, blockListener, Priority.Normal, this);
  97. //Entity Stuff
  98. pm.registerEvent(Event.Type.ENTITY_TARGET, entityListener, Priority.Normal, this);
  99. pm.registerEvent(Event.Type.ENTITY_DEATH, entityListener, Priority.Normal, this);
  100. pm.registerEvent(Event.Type.ENTITY_DAMAGE, entityListener, Priority.Highest, this);
  101. pm.registerEvent(Event.Type.CREATURE_SPAWN, entityListener, Priority.Normal, this);
  102. PluginDescriptionFile pdfFile = this.getDescription();
  103. mcPermissions.initialize(getServer());
  104. if(LoadProperties.useMySQL)
  105. {
  106. database = new Database(this);
  107. database.createStructure();
  108. } else
  109. Leaderboard.makeLeaderboards(); //Make the leaderboards
  110. for(Player player : getServer().getOnlinePlayers()){Users.addUser(player);} //In case of reload add all users back into PlayerProfile
  111. System.out.println(pdfFile.getName() + " version " + pdfFile.getVersion() + " is enabled!" );
  112. mcMMO_Timer.schedule(new mcTimer(this), (long)0, (long)(1000));
  113. //mcMMO_SpellTimer.schedule(new mcTimerSpells(this), (long)0, (long)(100));
  114. }
  115. public static void download(Logger log, URL url, File file) throws IOException
  116. {
  117. if (!file.getParentFile().exists())
  118. file.getParentFile().mkdir();
  119. if (file.exists())
  120. file.delete();
  121. file.createNewFile();
  122. final int size = url.openConnection().getContentLength();
  123. log.info("Downloading " + file.getName() + " (" + size / 1024 + "kb) ...");
  124. final InputStream in = url.openStream();
  125. final OutputStream out = new BufferedOutputStream(new FileOutputStream(file));
  126. final byte[] buffer = new byte[1024];
  127. int len, downloaded = 0, msgs = 0;
  128. final long start = System.currentTimeMillis();
  129. while ((len = in.read(buffer)) >= 0) {
  130. out.write(buffer, 0, len);
  131. downloaded += len;
  132. if ((int)((System.currentTimeMillis() - start) / 500) > msgs) {
  133. log.info((int)((double)downloaded / (double)size * 100d) + "%");
  134. msgs++;
  135. }
  136. }
  137. in.close();
  138. out.close();
  139. log.info("Download finished");
  140. }
  141. public PlayerProfile getPlayerProfile(Player player)
  142. {
  143. return Users.getProfile(player);
  144. }
  145. public void checkXp(Player player, SkillType skillType)
  146. {
  147. if(skillType == SkillType.ALL)
  148. Skills.XpCheckAll(player);
  149. else
  150. Skills.XpCheckSkill(skillType, player);
  151. }
  152. public boolean inSameParty(Player playera, Player playerb)
  153. {
  154. if(Users.getProfile(playera).inParty() && Users.getProfile(playerb).inParty()){
  155. if(Users.getProfile(playera).getParty().equals(Users.getProfile(playerb).getParty())){
  156. return true;
  157. } else {
  158. return false;
  159. }
  160. } else {
  161. return false;
  162. }
  163. }
  164. public ArrayList<String> getParties(){
  165. String location = "plugins/mcMMO/mcmmo.users";
  166. ArrayList<String> parties = new ArrayList<String>();
  167. try {
  168. //Open the users file
  169. FileReader file = new FileReader(location);
  170. BufferedReader in = new BufferedReader(file);
  171. String line = "";
  172. while((line = in.readLine()) != null)
  173. {
  174. String[] character = line.split(":");
  175. String theparty = null;
  176. //Party
  177. if(character.length > 3)
  178. theparty = character[3];
  179. if(!parties.contains(theparty))
  180. parties.add(theparty);
  181. }
  182. in.close();
  183. } catch (Exception e) {
  184. log.log(Level.SEVERE, "Exception while reading "
  185. + location + " (Are you sure you formatted it correctly?)", e);
  186. }
  187. return parties;
  188. }
  189. public static String getPartyName(Player player){
  190. PlayerProfile PP = Users.getProfile(player);
  191. return PP.getParty();
  192. }
  193. public static boolean inParty(Player player){
  194. PlayerProfile PP = Users.getProfile(player);
  195. return PP.inParty();
  196. }
  197. public Permissions getPermissions() {
  198. return permissions;
  199. }
  200. public void onDisable() {
  201. System.out.println("mcMMO was disabled.");
  202. }
  203. public boolean onCommand( CommandSender sender, Command command, String label, String[] args ) {
  204. Player player = null;
  205. PlayerProfile PP = null;
  206. if(sender instanceof Player) {
  207. player = (Player) sender;
  208. PP = Users.getProfile(player);
  209. }
  210. String[] split = new String[args.length + 1];
  211. split[0] = label;
  212. for(int a = 0; a < args.length; a++){
  213. split[a + 1] = args[a];
  214. }
  215. //Check if the command is an MMO related help command
  216. if(label.equalsIgnoreCase("taming") || split[0].toLowerCase().equalsIgnoreCase(mcLocale.getString("m.SkillTaming").toLowerCase())){
  217. float skillvalue = (float)PP.getSkillLevel(SkillType.TAMING);
  218. String percentage = String.valueOf((skillvalue / 1000) * 100);
  219. player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] {mcLocale.getString("m.SkillTaming")}));
  220. player.sendMessage(mcLocale.getString("m.XPGain", new Object[] {mcLocale.getString("m.XPGainTaming")}));
  221. if(mcPermissions.getInstance().taming(player))
  222. player.sendMessage(mcLocale.getString("m.LVL", new Object[] {PP.getSkillLevel(SkillType.TAMING), PP.getSkillXpLevel(SkillType.TAMING), PP.getXpToLevel(SkillType.TAMING)}));
  223. player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] {mcLocale.getString("m.Effects")}));
  224. player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] {mcLocale.getString("m.EffectsTaming1_0"), mcLocale.getString("m.EffectsTaming1_1")}));
  225. player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] {mcLocale.getString("m.EffectsTaming2_0"), mcLocale.getString("m.EffectsTaming2_1")}));
  226. player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] {mcLocale.getString("m.EffectsTaming3_0"), mcLocale.getString("m.EffectsTaming3_1")}));
  227. player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] {mcLocale.getString("m.EffectsTaming4_0"), mcLocale.getString("m.EffectsTaming4_1")}));
  228. player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] {mcLocale.getString("m.EffectsTaming5_0"), mcLocale.getString("m.EffectsTaming5_1")}));
  229. player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] {mcLocale.getString("m.EffectsTaming6_0"), mcLocale.getString("m.EffectsTaming6_1")}));
  230. player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] {mcLocale.getString("m.YourStats")}));
  231. if(PP.getSkillLevel(SkillType.TAMING) < 100)
  232. player.sendMessage(mcLocale.getString("m.AbilityLockTemplate", new Object[] {mcLocale.getString("m.AbilLockTaming1")}));
  233. else
  234. player.sendMessage(mcLocale.getString("m.AbilityBonusTemplate", new Object[] {mcLocale.getString("m.AbilBonusTaming1_0"), mcLocale.getString("m.AbilBonusTaming1_1")}));
  235. if(PP.getSkillLevel(SkillType.TAMING) < 250)
  236. player.sendMessage(mcLocale.getString("m.AbilityLockTemplate", new Object[] {mcLocale.getString("m.AbilLockTaming2")}));
  237. else
  238. player.sendMessage(mcLocale.getString("m.AbilityBonusTemplate", new Object[] {mcLocale.getString("m.AbilBonusTaming2_0"), mcLocale.getString("m.AbilBonusTaming2_1")}));
  239. if(PP.getSkillLevel(SkillType.TAMING) < 500)
  240. player.sendMessage(mcLocale.getString("m.AbilityLockTemplate", new Object[] {mcLocale.getString("m.AbilLockTaming3")}));
  241. else
  242. player.sendMessage(mcLocale.getString("m.AbilityBonusTemplate", new Object[] {mcLocale.getString("m.AbilBonusTaming3_0"), mcLocale.getString("m.AbilBonusTaming3_1")}));
  243. if(PP.getSkillLevel(SkillType.TAMING) < 750)
  244. player.sendMessage(mcLocale.getString("m.AbilityLockTemplate", new Object[] {mcLocale.getString("m.AbilLockTaming4")}));
  245. else
  246. player.sendMessage(mcLocale.getString("m.AbilityBonusTemplate", new Object[] {mcLocale.getString("m.AbilBonusTaming4_0"), mcLocale.getString("m.AbilBonusTaming4_1")}));
  247. player.sendMessage(mcLocale.getString("m.TamingGoreChance", new Object[] {percentage}));
  248. }
  249. else if(label.equalsIgnoreCase("woodcutting") || split[0].toLowerCase().equalsIgnoreCase(mcLocale.getString("m.SkillWoodCutting").toLowerCase())){
  250. float skillvalue = (float)PP.getSkillLevel(SkillType.WOODCUTTING);
  251. int ticks = 2;
  252. int x = PP.getSkillLevel(SkillType.WOODCUTTING);
  253. while(x >= 50){
  254. x-=50;
  255. ticks++;
  256. }
  257. String percentage = String.valueOf((skillvalue / 1000) * 100);
  258. player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] {mcLocale.getString("m.SkillWoodCutting")}));
  259. player.sendMessage(mcLocale.getString("m.XPGain", new Object[] {mcLocale.getString("m.XPGainWoodCutting")}));
  260. if(mcPermissions.getInstance().woodcutting(player))
  261. player.sendMessage(mcLocale.getString("m.LVL", new Object[] {PP.getSkillLevel(SkillType.WOODCUTTING), PP.getSkillXpLevel(SkillType.WOODCUTTING), PP.getXpToLevel(SkillType.WOODCUTTING)}));
  262. player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] {mcLocale.getString("m.Effects")}));
  263. player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] {mcLocale.getString("m.EffectsWoodCutting1_0"), mcLocale.getString("m.EffectsWoodCutting1_1")}));
  264. player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] {mcLocale.getString("m.EffectsWoodCutting2_0"), mcLocale.getString("m.EffectsWoodCutting2_1")}));
  265. player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] {mcLocale.getString("m.EffectsWoodCutting3_0"), mcLocale.getString("m.EffectsWoodCutting3_1")}));
  266. player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] {mcLocale.getString("m.YourStats")}));
  267. if(PP.getSkillLevel(SkillType.WOODCUTTING) < 100)
  268. player.sendMessage(mcLocale.getString("m.AbilityLockTemplate", new Object[] {mcLocale.getString("m.AbilLockWoodCutting1")}));
  269. else
  270. player.sendMessage(mcLocale.getString("m.AbilityBonusTemplate", new Object[] {mcLocale.getString("m.AbilBonusWoodCutting1_0"), mcLocale.getString("m.AbilBonusWoodCutting1_1")}));
  271. player.sendMessage(mcLocale.getString("m.WoodCuttingDoubleDropChance", new Object[] {percentage}));
  272. player.sendMessage(mcLocale.getString("m.WoodCuttingTreeFellerLength", new Object[] {ticks}));
  273. }
  274. else if(label.equalsIgnoreCase("archery") || split[0].toLowerCase().equalsIgnoreCase(mcLocale.getString("m.SkillArchery").toLowerCase())){
  275. Integer rank = 0;
  276. if(PP.getSkillLevel(SkillType.ARCHERY) >= 50)
  277. rank++;
  278. if(PP.getSkillLevel(SkillType.ARCHERY) >= 250)
  279. rank++;
  280. if(PP.getSkillLevel(SkillType.ARCHERY) >= 575)
  281. rank++;
  282. if(PP.getSkillLevel(SkillType.ARCHERY) >= 725)
  283. rank++;
  284. if(PP.getSkillLevel(SkillType.ARCHERY) >= 1000)
  285. rank++;
  286. float skillvalue = (float)PP.getSkillLevel(SkillType.ARCHERY);
  287. String percentage = String.valueOf((skillvalue / 1000) * 100);
  288. int ignition = 20;
  289. if(PP.getSkillLevel(SkillType.ARCHERY) >= 200)
  290. ignition+=20;
  291. if(PP.getSkillLevel(SkillType.ARCHERY) >= 400)
  292. ignition+=20;
  293. if(PP.getSkillLevel(SkillType.ARCHERY) >= 600)
  294. ignition+=20;
  295. if(PP.getSkillLevel(SkillType.ARCHERY) >= 800)
  296. ignition+=20;
  297. if(PP.getSkillLevel(SkillType.ARCHERY) >= 1000)
  298. ignition+=20;
  299. String percentagedaze;
  300. if(PP.getSkillLevel(SkillType.ARCHERY) < 1000){
  301. percentagedaze = String.valueOf((skillvalue / 2000) * 100);
  302. } else {
  303. percentagedaze = "50";
  304. }
  305. player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] {mcLocale.getString("m.SkillArchery")}));
  306. player.sendMessage(mcLocale.getString("m.XPGain", new Object[] {mcLocale.getString("m.XPGainArchery")}));
  307. if(mcPermissions.getInstance().archery(player))
  308. player.sendMessage(mcLocale.getString("m.LVL", new Object[] {PP.getSkillLevel(SkillType.ARCHERY), PP.getSkillXpLevel(SkillType.ARCHERY), PP.getXpToLevel(SkillType.ARCHERY)}));
  309. player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] {mcLocale.getString("m.Effects")}));
  310. player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] {mcLocale.getString("m.EffectsArchery1_0"), mcLocale.getString("m.EffectsArchery1_1")}));
  311. player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] {mcLocale.getString("m.EffectsArchery2_0"), mcLocale.getString("m.EffectsArchery2_1")}));
  312. player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] {mcLocale.getString("m.EffectsArchery3_0"), mcLocale.getString("m.EffectsArchery3_1")}));
  313. player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] {mcLocale.getString("m.EffectsArchery4_0"), mcLocale.getString("m.EffectsArchery4_1")}));
  314. player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] {mcLocale.getString("m.YourStats")}));
  315. player.sendMessage(mcLocale.getString("m.ArcheryDazeChance", new Object[] {percentagedaze}));
  316. player.sendMessage(mcLocale.getString("m.ArcheryRetrieveChance", new Object[] {percentage}));
  317. player.sendMessage(mcLocale.getString("m.ArcheryIgnitionLength", new Object[] {(ignition / 20)}));
  318. player.sendMessage(mcLocale.getString("m.ArcheryDamagePlus", new Object[] {rank}));
  319. }
  320. else if(label.equalsIgnoreCase("axes") || split[0].toLowerCase().equalsIgnoreCase(mcLocale.getString("m.SkillAxes"))){
  321. String percentage;
  322. float skillvalue = (float)PP.getSkillLevel(SkillType.AXES);
  323. if(PP.getSkillLevel(SkillType.AXES) < 750){
  324. percentage = String.valueOf((skillvalue / 1000) * 100);
  325. } else {
  326. percentage = "75";
  327. }
  328. int ticks = 2;
  329. int x = PP.getSkillLevel(SkillType.AXES);
  330. while(x >= 50){
  331. x-=50;
  332. ticks++;
  333. }
  334. player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] {mcLocale.getString("m.SkillAxes")}));
  335. player.sendMessage(mcLocale.getString("m.XPGain", new Object[] {mcLocale.getString("m.XPGainAxes")}));
  336. if(mcPermissions.getInstance().axes(player))
  337. player.sendMessage(mcLocale.getString("m.LVL", new Object[] {PP.getSkillLevel(SkillType.AXES), PP.getSkillXpLevel(SkillType.AXES), PP.getXpToLevel(SkillType.AXES)}));
  338. player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] {mcLocale.getString("m.Effects")}));
  339. player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] {mcLocale.getString("m.EffectsAxes1_0"), mcLocale.getString("m.EffectsAxes1_1")}));
  340. player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] {mcLocale.getString("m.EffectsAxes2_0"), mcLocale.getString("m.EffectsAxes2_1")}));
  341. player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] {mcLocale.getString("m.EffectsAxes3_0"), mcLocale.getString("m.EffectsAxes3_1")}));
  342. player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] {mcLocale.getString("m.YourStats")}));
  343. player.sendMessage(mcLocale.getString("m.AxesCritChance", new Object[] {percentage}));
  344. if(PP.getSkillLevel(SkillType.AXES) < 500){
  345. player.sendMessage(mcLocale.getString("m.AbilityLockTemplate", new Object[] {mcLocale.getString("m.AbilLockAxes1")}));
  346. } else {
  347. player.sendMessage(mcLocale.getString("m.AbilityBonusTemplate", new Object[] {mcLocale.getString("m.AbilBonusAxes1_0"), mcLocale.getString("m.AbilBonusAxes1_1")}));
  348. }
  349. player.sendMessage(mcLocale.getString("m.AxesSkullLength", new Object[] {ticks}));
  350. }
  351. else if(label.equalsIgnoreCase("swords") || split[0].toLowerCase().equalsIgnoreCase(mcLocale.getString("m.SkillSwords").toLowerCase())){
  352. int bleedrank = 2;
  353. String percentage, parrypercentage = null, counterattackpercentage;
  354. float skillvalue = (float)PP.getSkillLevel(SkillType.SWORDS);
  355. if(PP.getSkillLevel(SkillType.SWORDS) < 750){
  356. percentage = String.valueOf((skillvalue / 1000) * 100);
  357. } else {
  358. percentage = "75";
  359. }
  360. if(skillvalue >= 750)
  361. bleedrank+=1;
  362. if(PP.getSkillLevel(SkillType.SWORDS) <= 900){
  363. parrypercentage = String.valueOf((skillvalue / 3000) * 100);
  364. } else {
  365. parrypercentage = "30";
  366. }
  367. if(PP.getSkillLevel(SkillType.SWORDS) <= 600){
  368. counterattackpercentage = String.valueOf((skillvalue / 2000) * 100);
  369. } else {
  370. counterattackpercentage = "30";
  371. }
  372. int ticks = 2;
  373. int x = PP.getSkillLevel(SkillType.SWORDS);
  374. while(x >= 50){
  375. x-=50;
  376. ticks++;
  377. }
  378. player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] {mcLocale.getString("m.SkillSwords")}));
  379. player.sendMessage(mcLocale.getString("m.XPGain", new Object[] {mcLocale.getString("m.XPGainSwords")}));
  380. if(mcPermissions.getInstance().swords(player))
  381. player.sendMessage(mcLocale.getString("m.LVL", new Object[] {PP.getSkillLevel(SkillType.SWORDS), PP.getSkillXpLevel(SkillType.SWORDS), PP.getXpToLevel(SkillType.SWORDS)}));
  382. player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] {mcLocale.getString("m.Effects")}));
  383. player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] {mcLocale.getString("m.EffectsSwords1_0"), mcLocale.getString("m.EffectsSwords1_1")}));
  384. player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] {mcLocale.getString("m.EffectsSwords2_0"), mcLocale.getString("m.EffectsSwords2_1")}));
  385. player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] {mcLocale.getString("m.EffectsSwords3_0"), mcLocale.getString("m.EffectsSwords3_1")}));
  386. player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] {mcLocale.getString("m.EffectsSwords4_0"), mcLocale.getString("m.EffectsSwords4_1")}));
  387. player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] {mcLocale.getString("m.EffectsSwords5_0"), mcLocale.getString("m.EffectsSwords5_1")}));
  388. player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] {mcLocale.getString("m.YourStats")}));
  389. player.sendMessage(mcLocale.getString("m.SwordsCounterAttChance", new Object[] {counterattackpercentage}));
  390. player.sendMessage(mcLocale.getString("m.SwordsBleedLength", new Object[] {bleedrank}));
  391. player.sendMessage(mcLocale.getString("m.SwordsTickNote"));
  392. player.sendMessage(mcLocale.getString("m.SwordsBleedLength", new Object[] {percentage}));
  393. player.sendMessage(mcLocale.getString("m.SwordsParryChance", new Object[] {parrypercentage}));
  394. player.sendMessage(mcLocale.getString("m.SwordsSSLength", new Object[] {ticks}));
  395. }
  396. else if(label.equalsIgnoreCase("acrobatics") || split[0].toLowerCase().equalsIgnoreCase(mcLocale.getString("m.SkillAcrobatics").toLowerCase())){
  397. String dodgepercentage;
  398. float skillvalue = (float)PP.getSkillLevel(SkillType.ACROBATICS);
  399. String percentage = String.valueOf((skillvalue / 1000) * 100);
  400. String gracepercentage = String.valueOf(((skillvalue / 1000) * 100) * 2);
  401. if(PP.getSkillLevel(SkillType.ACROBATICS) <= 800){
  402. dodgepercentage = String.valueOf((skillvalue / 4000 * 100));
  403. } else {
  404. dodgepercentage = "20";
  405. }
  406. player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] {mcLocale.getString("m.SkillAcrobatics")}));
  407. player.sendMessage(mcLocale.getString("m.XPGain", new Object[] {mcLocale.getString("m.XPGainAcrobatics")}));
  408. if(mcPermissions.getInstance().acrobatics(player))
  409. player.sendMessage(mcLocale.getString("m.LVL", new Object[] {PP.getSkillLevel(SkillType.ACROBATICS), PP.getSkillXpLevel(SkillType.ACROBATICS), PP.getXpToLevel(SkillType.ACROBATICS)}));
  410. player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] {mcLocale.getString("m.Effects")}));
  411. player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] {mcLocale.getString("m.EffectsAcrobatics1_0"), mcLocale.getString("m.EffectsAcrobatics1_1")}));
  412. player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] {mcLocale.getString("m.EffectsAcrobatics2_0"), mcLocale.getString("m.EffectsAcrobatics2_1")}));
  413. player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] {mcLocale.getString("m.EffectsAcrobatics3_0"), mcLocale.getString("m.EffectsAcrobatics3_1")}));
  414. player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] {mcLocale.getString("m.YourStats")}));
  415. player.sendMessage(mcLocale.getString("m.AcrobaticsRollChance", new Object[] {percentage}));
  416. player.sendMessage(mcLocale.getString("m.AcrobaticsGracefulRollChance", new Object[] {gracepercentage}));
  417. player.sendMessage(mcLocale.getString("m.AcrobaticsDodgeChance", new Object[] {dodgepercentage}));
  418. }
  419. else if(label.equalsIgnoreCase("mining") || split[0].toLowerCase().equalsIgnoreCase(mcLocale.getString("m.SkillMining"))){
  420. float skillvalue = (float)PP.getSkillLevel(SkillType.MINING);
  421. String percentage = String.valueOf((skillvalue / 1000) * 100);
  422. int ticks = 2;
  423. int x = PP.getSkillLevel(SkillType.MINING);
  424. while(x >= 50){
  425. x-=50;
  426. ticks++;
  427. }
  428. player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] {mcLocale.getString("m.SkillMining")}));
  429. player.sendMessage(mcLocale.getString("m.XPGain", new Object[] {mcLocale.getString("m.XPGainMining")}));
  430. if(mcPermissions.getInstance().mining(player))
  431. player.sendMessage(mcLocale.getString("m.LVL", new Object[] {PP.getSkillLevel(SkillType.MINING), PP.getSkillXpLevel(SkillType.MINING), PP.getXpToLevel(SkillType.MINING)}));
  432. player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] {mcLocale.getString("m.Effects")}));
  433. player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] {mcLocale.getString("m.EffectsMining1_0"), mcLocale.getString("m.EffectsMining1_1")}));
  434. player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] {mcLocale.getString("m.EffectsMining2_0"), mcLocale.getString("m.EffectsMining2_1")}));
  435. player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] {mcLocale.getString("m.YourStats")}));
  436. player.sendMessage(mcLocale.getString("m.MiningDoubleDropChance", new Object[] {percentage}));
  437. player.sendMessage(mcLocale.getString("m.MiningSuperBreakerLength", new Object[] {ticks}));
  438. }
  439. else if(label.equalsIgnoreCase("repair") || split[0].toLowerCase().equalsIgnoreCase(mcLocale.getString("m.SkillRepair").toLowerCase())){
  440. float skillvalue = (float)PP.getSkillLevel(SkillType.REPAIR);
  441. String percentage = String.valueOf((skillvalue / 1000) * 100);
  442. String repairmastery = String.valueOf((skillvalue / 500) * 100);
  443. player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] {mcLocale.getString("m.SkillRepair")}));
  444. player.sendMessage(mcLocale.getString("m.XPGain", new Object[] {mcLocale.getString("m.XPGainRepair")}));
  445. if(mcPermissions.getInstance().repair(player))
  446. player.sendMessage(mcLocale.getString("m.LVL", new Object[] {PP.getSkillLevel(SkillType.REPAIR), PP.getSkillXpLevel(SkillType.REPAIR), PP.getXpToLevel(SkillType.REPAIR)}));
  447. player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] {mcLocale.getString("m.Effects")}));
  448. player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] {mcLocale.getString("m.EffectsRepair1_0"), mcLocale.getString("m.EffectsRepair1_1")}));
  449. player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] {mcLocale.getString("m.EffectsRepair2_0"), mcLocale.getString("m.EffectsRepair2_1")}));
  450. player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] {mcLocale.getString("m.EffectsRepair3_0"), mcLocale.getString("m.EffectsRepair3_1")}));
  451. player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] {mcLocale.getString("m.EffectsRepair4_0", new Object[]{LoadProperties.repairdiamondlevel}), mcLocale.getString("m.EffectsRepair4_1")}));
  452. player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] {mcLocale.getString("m.YourStats")}));
  453. player.sendMessage(mcLocale.getString("m.RepairRepairMastery", new Object[] {repairmastery}));
  454. player.sendMessage(mcLocale.getString("m.RepairSuperRepairChance", new Object[] {percentage}));
  455. }
  456. else if(label.equalsIgnoreCase("unarmed")){
  457. String percentage, arrowpercentage;
  458. float skillvalue = (float)PP.getSkillLevel(SkillType.UNARMED);
  459. if(PP.getSkillLevel(SkillType.UNARMED) < 1000){
  460. percentage = String.valueOf((skillvalue / 4000) * 100);
  461. } else {
  462. percentage = "25";
  463. }
  464. if(PP.getSkillLevel(SkillType.UNARMED) < 1000){
  465. arrowpercentage = String.valueOf(((skillvalue / 1000) * 100) / 2);
  466. } else {
  467. arrowpercentage = "50";
  468. }
  469. int ticks = 2;
  470. int x = PP.getSkillLevel(SkillType.UNARMED);
  471. while(x >= 50){
  472. x-=50;
  473. ticks++;
  474. }
  475. player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] {mcLocale.getString("m.SkillUnarmed")}));
  476. player.sendMessage(mcLocale.getString("m.XPGain", new Object[] {mcLocale.getString("m.XPGainUnarmed")}));
  477. if(mcPermissions.getInstance().unarmed(player))
  478. player.sendMessage(mcLocale.getString("m.LVL", new Object[] {PP.getSkillLevel(SkillType.UNARMED), PP.getSkillXpLevel(SkillType.UNARMED), PP.getXpToLevel(SkillType.UNARMED)}));
  479. player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] {mcLocale.getString("m.Effects")}));
  480. player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] {mcLocale.getString("m.EffectsUnarmed1_0"), mcLocale.getString("m.EffectsUnarmed1_1")}));
  481. player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] {mcLocale.getString("m.EffectsUnarmed2_0"), mcLocale.getString("m.EffectsUnarmed2_1")}));
  482. player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] {mcLocale.getString("m.EffectsUnarmed3_0"), mcLocale.getString("m.EffectsUnarmed3_1")}));
  483. player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] {mcLocale.getString("m.EffectsUnarmed4_0"), mcLocale.getString("m.EffectsUnarmed4_1")}));
  484. player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] {mcLocale.getString("m.EffectsUnarmed5_0"), mcLocale.getString("m.EffectsUnarmed5_1")}));
  485. player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] {mcLocale.getString("m.YourStats")}));
  486. player.sendMessage(mcLocale.getString("m.UnarmedArrowDeflectChance", new Object[] {arrowpercentage}));
  487. player.sendMessage(mcLocale.getString("m.UnarmedDisarmChance", new Object[] {percentage}));
  488. if(PP.getSkillLevel(SkillType.UNARMED) < 250){
  489. player.sendMessage(mcLocale.getString("m.AbilityLockTemplate", new Object[] {mcLocale.getString("m.AbilLockUnarmed1")}));
  490. } else if(PP.getSkillLevel(SkillType.UNARMED) >= 250 && PP.getSkillLevel(SkillType.UNARMED) < 500){
  491. player.sendMessage(mcLocale.getString("m.AbilityBonusTemplate", new Object[] {mcLocale.getString("m.AbilBonusUnarmed1_0"), mcLocale.getString("m.AbilBonusUnarmed1_1")}));
  492. player.sendMessage(mcLocale.getString("m.AbilityLockTemplate", new Object[] {mcLocale.getString("m.AbilLockUnarmed2")}));
  493. } else {
  494. player.sendMessage(mcLocale.getString("m.AbilityBonusTemplate", new Object[] {mcLocale.getString("m.AbilBonusUnarmed2_0"), mcLocale.getString("m.AbilBonusUnarmed2_1")}));
  495. }
  496. player.sendMessage(mcLocale.getString("m.UnarmedBerserkLength", new Object[] {ticks}));
  497. }
  498. else if(label.equalsIgnoreCase("herbalism") || split[0].toLowerCase().equalsIgnoreCase(mcLocale.getString("m.SkillHerbalism").toLowerCase())){
  499. int rank = 0;
  500. if(PP.getSkillLevel(SkillType.HERBALISM) >= 50)
  501. rank++;
  502. if (PP.getSkillLevel(SkillType.HERBALISM) >= 150)
  503. rank++;
  504. if (PP.getSkillLevel(SkillType.HERBALISM) >= 250)
  505. rank++;
  506. if (PP.getSkillLevel(SkillType.HERBALISM) >= 350)
  507. rank++;
  508. if (PP.getSkillLevel(SkillType.HERBALISM) >= 450)
  509. rank++;
  510. if (PP.getSkillLevel(SkillType.HERBALISM) >= 550)
  511. rank++;
  512. if (PP.getSkillLevel(SkillType.HERBALISM) >= 650)
  513. rank++;
  514. if (PP.getSkillLevel(SkillType.HERBALISM) >= 750)
  515. rank++;
  516. int bonus = 0;
  517. if(PP.getSkillLevel(SkillType.HERBALISM) >= 200)
  518. bonus++;
  519. if(PP.getSkillLevel(SkillType.HERBALISM) >= 400)
  520. bonus++;
  521. if(PP.getSkillLevel(SkillType.HERBALISM) >= 600)
  522. bonus++;
  523. int ticks = 2;
  524. int x = PP.getSkillLevel(SkillType.HERBALISM);
  525. while(x >= 50){
  526. x-=50;
  527. ticks++;
  528. }
  529. float skillvalue = (float)PP.getSkillLevel(SkillType.HERBALISM);
  530. String percentage = String.valueOf((skillvalue / 1000) * 100);
  531. String gpercentage = String.valueOf((skillvalue / 1500) * 100);
  532. player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] {mcLocale.getString("m.SkillHerbalism")}));
  533. player.sendMessage(mcLocale.getString("m.XPGain", new Object[] {mcLocale.getString("m.XPGainHerbalism")}));
  534. if(mcPermissions.getInstance().herbalism(player))
  535. player.sendMessage(mcLocale.getString("m.LVL", new Object[] {PP.getSkillLevel(SkillType.HERBALISM), PP.getSkillXpLevel(SkillType.HERBALISM), PP.getXpToLevel(SkillType.HERBALISM)}));
  536. player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] {mcLocale.getString("m.Effects")}));
  537. player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] {mcLocale.getString("m.EffectsHerbalism1_0"), mcLocale.getString("m.EffectsHerbalism1_1")}));
  538. player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] {mcLocale.getString("m.EffectsHerbalism2_0"), mcLocale.getString("m.EffectsHerbalism2_1")}));
  539. player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] {mcLocale.getString("m.EffectsHerbalism3_0"), mcLocale.getString("m.EffectsHerbalism3_1")}));
  540. player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] {mcLocale.getString("m.EffectsHerbalism4_0"), mcLocale.getString("m.EffectsHerbalism4_1")}));
  541. player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] {mcLocale.getString("m.EffectsHerbalism5_0"), mcLocale.getString("m.EffectsHerbalism5_1")}));
  542. player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] {mcLocale.getString("m.YourStats")}));
  543. player.sendMessage(mcLocale.getString("m.HerbalismGreenTerraLength", new Object[] {ticks}));
  544. player.sendMessage(mcLocale.getString("m.HerbalismGreenThumbChance", new Object[] {gpercentage}));
  545. player.sendMessage(mcLocale.getString("m.HerbalismGreenThumbStage", new Object[] {bonus}));
  546. player.sendMessage(mcLocale.getString("m.HerbalismDoubleDropChance", new Object[] {percentage}));
  547. player.sendMessage(mcLocale.getString("m.HerbalismFoodPlus", new Object[] {rank}));
  548. }
  549. else if(label.equalsIgnoreCase("excavation") || split[0].toLowerCase().equalsIgnoreCase(mcLocale.getString("m.SkillExcavation").toLowerCase()))
  550. {
  551. int ticks = 2;
  552. int x = PP.getSkillLevel(SkillType.EXCAVATION);
  553. while(x >= 50){
  554. x-=50;
  555. ticks++;
  556. }
  557. player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] {mcLocale.getString("m.SkillExcavation")}));
  558. player.sendMessage(mcLocale.getString("m.XPGain", new Object[] {mcLocale.getString("m.XPGainExcavation")}));
  559. if(mcPermissions.getInstance().excavation(player))
  560. player.sendMessage(mcLocale.getString("m.LVL", new Object[] {PP.getSkillLevel(SkillType.EXCAVATION), PP.getSkillXpLevel(SkillType.EXCAVATION), PP.getXpToLevel(SkillType.EXCAVATION)}));
  561. player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] {mcLocale.getString("m.Effects")}));
  562. player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] {mcLocale.getString("m.EffectsExcavation1_0"), mcLocale.getString("m.EffectsExcavation1_1")}));
  563. player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] {mcLocale.getString("m.EffectsExcavation2_0"), mcLocale.getString("m.EffectsExcavation2_1")}));
  564. player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] {mcLocale.getString("m.YourStats")}));
  565. player.sendMessage(mcLocale.getString("m.ExcavationGreenTerraLength", new Object[] {ticks}));
  566. }
  567. else if(label.equalsIgnoreCase("sorcery") || split[0].toLowerCase().equalsIgnoreCase(mcLocale.getString("m.SkillSorcery").toLowerCase()))
  568. {
  569. /*
  570. player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] {mcLocale.getString("m.SkillExcavation")}));
  571. player.sendMessage(mcLocale.getString("m.XPGain", new Object[] {mcLocale.getString("m.XPGainExcavation")}));
  572. player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] {mcLocale.getString("m.Effects")}));
  573. player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] {mcLocale.getString("m.EffectsExcavation1_0"), mcLocale.getString("m.EffectsExcavation1_1")}));
  574. player.sendMessage(mcLocale.getString("m.EffectsTemplate", new Object[] {mcLocale.getString("m.EffectsExcavation2_0"), mcLocale.getString("m.EffectsExcavation2_1")}));
  575. player.sendMessage(mcLocale.getString("m.SkillHeader", new Object[] {mcLocale.getString("m.YourStats")}));
  576. player.sendMessage(mcLocale.getString("m.ExcavationGreenTerraLength", new Object[] {ticks}));
  577. */
  578. }
  579. else if(LoadProperties.mcmmoEnable && label.equalsIgnoreCase(LoadProperties.mcmmo))
  580. {
  581. player.sendMessage(ChatColor.RED+"-----[]"+ChatColor.GREEN+"mcMMO"+ChatColor.RED+"[]-----");
  582. String description = mcLocale.getString("mcMMO.Description", new Object[] {LoadProperties.mcc});
  583. String[] mcSplit = description.split(",");
  584. for(String x : mcSplit)
  585. {
  586. player.sendMessage(x);
  587. }
  588. if(LoadProperties.contribEnabled)
  589. {
  590. ContribPlayer cPlayer = ContribCraftPlayer.getContribPlayer(player);
  591. if(LoadProperties.donateMessage)
  592. cPlayer.sendNotification("[mcMMO] Donate!", "Paypal nossr50@gmail.com", Material.CAKE);
  593. }
  594. else
  595. {
  596. if(LoadProperties.donateMessage)
  597. player.sendMessage(ChatColor.GREEN+"If you like my work you can donate via Paypal: nossr50@gmail.com");
  598. }
  599. }
  600. else if(LoadProperties.mccEnable && label.equalsIgnoreCase(LoadProperties.mcc))
  601. {
  602. player.sendMessage(ChatColor.RED+"---[]"+ChatColor.YELLOW+"mcMMO Commands"+ChatColor.RED+"[]---");
  603. if(mcPermissions.getInstance().party(player)){
  604. player.sendMessage(mcLocale.getString("m.mccPartyCommands"));
  605. player.sendMessage(LoadProperties.party+" "+mcLocale.getString("m.mccParty"));
  606. player.sendMessage(LoadProperties.party+" q "+mcLocale.getString("m.mccPartyQ"));
  607. if(mcPermissions.getInstance().partyChat(player))
  608. player.sendMessage("/p "+mcLocale.getString("m.mccPartyToggle"));
  609. player.sendMessage(LoadProperties.invite+" "+mcLocale.getString("m.mccPartyInvite"));
  610. player.sendMessage(LoadProperties.accept+" "+mcLocale.getString("m.mccPartyAccept"));
  611. if(mcPermissions.getInstance().partyTeleport(player))
  612. player.sendMessage(LoadProperties.ptp+" "+mcLocale.getString("m.mccPartyTeleport"));
  613. }
  614. player.sendMessage(mcLocale.getString("m.mccOtherCommands"));
  615. player.sendMessage(LoadProperties.stats+ChatColor.RED+" "+mcLocale.getString("m.mccStats"));
  616. player.sendMessage("/mctop <skillname> <page> "+ChatColor.RED+mcLocale.getString("m.mccLeaderboards"));
  617. if(mcPermissions.getInstance().mySpawn(player)){
  618. player.sendMessage(LoadProperties.myspawn+" "+ChatColor.RED+mcLocale.getString("m.mccMySpawn"));
  619. player.sendMessage(LoadProperties.clearmyspawn+" "+ChatColor.RED+mcLocale.getString("m.mccClearMySpawn"));
  620. }
  621. if(mcPermissions.getInstance().mcAbility(player))
  622. player.sendMessage(LoadProperties.mcability+ChatColor.RED+" "+mcLocale.getString("m.mccToggleAbility"));
  623. if(mcPermissions.getInstance().adminChat(player)){
  624. player.sendMessage("/a "+ChatColor.RED+mcLocale.getString("m.mccAdminToggle"));
  625. }
  626. if(mcPermissions.getInstance().whois(player))
  627. player.sendMessage(LoadProperties.whois+" "+mcLocale.getString("m.mccWhois"));
  628. if(mcPermissions.getInstance().mmoedit(player)){
  629. //player.sendMessage(LoadProperties.mmoedit+" [skill] [newvalue] "+ChatColor.RED+"Modify the designated skill value");
  630. player.sendMessage(LoadProperties.mmoedit+mcLocale.getString("m.mccMmoedit"));
  631. }
  632. if(mcPermissions.getInstance().mcgod(player))
  633. player.sendMessage(LoadProperties.mcgod+ChatColor.RED+" "+mcLocale.getString("m.mccMcGod"));
  634. player.sendMessage(mcLocale.getString("m.mccSkillInfo"));
  635. player.sendMessage(LoadProperties.mcmmo+" "+mcLocale.getString("m.mccModDescription"));
  636. }
  637. else if(LoadProperties.mcabilityEnable && mcPermissions.permissionsEnabled && label.equalsIgnoreCase(LoadProperties.mcability)){
  638. if(PP.getAbilityUse()){
  639. player.sendMessage(mcLocale.getString("mcPlayerListener.AbilitiesOff"));
  640. PP.toggleAbilityUse();
  641. } else {
  642. player.sendMessage(mcLocale.getString("mcPlayerListener.AbilitiesOn"));
  643. PP.toggleAbilityUse();
  644. }
  645. }
  646. /*
  647. * FFS -> MySQL
  648. */
  649. else if(label.equalsIgnoreCase("mmoupdate"))
  650. {
  651. if(!mcPermissions.getInstance().admin(player))
  652. {
  653. player.sendMessage(ChatColor.YELLOW+"[mcMMO]"+ChatColor.DARK_RED +mcLocale.getString("mcPlayerListener.NoPermission"));
  654. return true;
  655. }
  656. player.sendMessage(ChatColor.GRAY+"Starting conversion...");
  657. Users.clearUsers();
  658. m.convertToMySQL(this);
  659. for(Player x : this.getServer().getOnlinePlayers())
  660. {
  661. Users.addUser(x);
  662. }
  663. player.sendMessage(ChatColor.GREEN+"Conversion finished!");
  664. }
  665. /*
  666. * LEADER BOARD COMMAND
  667. */
  668. else if(LoadProperties.mctopEnable && label.equalsIgnoreCase(LoadProperties.mctop)){
  669. if(LoadProperties.useMySQL == false){
  670. /*
  671. * POWER LEVEL INFO RETRIEVAL
  672. */
  673. if(split.length == 1){
  674. int p = 1;
  675. String[] info = Leaderboard.retrieveInfo(SkillType.ALL.toString(), p);
  676. player.sendMessage(mcLocale.getString("mcPlayerListener.PowerLevelLeaderboard"));
  677. int n = 1 * p; //Position
  678. for(String x : info){
  679. if(x != null){
  680. String digit = String.valueOf(n);
  681. if(n < 10)
  682. digit ="0"+String.valueOf(n);
  683. String[] splitx = x.split(":");
  684. //Format: 1. Playername - skill value
  685. player.sendMessage(digit+". "+ChatColor.GREEN+splitx[1]+" - "+ChatColor.WHITE+splitx[0]);
  686. n++;
  687. }
  688. }
  689. }
  690. if(split.length >= 2 && m.isInt(split[1])){
  691. int p = 1;
  692. //Grab page value if specified
  693. if(split.length >= 2){
  694. if(m.isInt(split[1])){
  695. p = Integer.valueOf(split[1]);
  696. }
  697. }
  698. int pt = p;
  699. if(p > 1){
  700. pt -= 1;
  701. pt += (pt * 10);
  702. pt = 10;
  703. }
  704. String[] info = Leaderboard.retrieveInfo(SkillType.ALL.toString(), p);
  705. player.sendMessage(mcLocale.getString("mcPlayerListener.PowerLevelLeaderboard"));
  706. int n = 1 * pt; //Position
  707. for(String x : info){
  708. if(x != null){
  709. String digit = String.valueOf(n);
  710. if(n < 10)
  711. digit ="0"+String.valueOf(n);
  712. String[] splitx = x.split(":");
  713. //Format: 1. Playername - skill value
  714. player.sendMessage(digit+". "+ChatColor.GREEN+splitx[1]+" - "+ChatColor.WHITE+splitx[0]);
  715. n++;
  716. }
  717. }
  718. }
  719. /*
  720. * SKILL SPECIFIED INFO RETRIEVAL
  721. */
  722. if(split.length >= 2 && Skills.isSkill(split[1]))
  723. {
  724. int p = 1;
  725. //Grab page value if specified
  726. if(split.length >= 3)
  727. {
  728. if(m.isInt(split[2])){
  729. p = Integer.valueOf(split[2]);
  730. }
  731. }
  732. int pt = p;
  733. if(p > 1){
  734. pt -= 1;
  735. pt += (pt * 10);
  736. pt = 10;
  737. }
  738. String firstLetter = split[1].substring(0,1); // Get first letter
  739. String remainder = split[1].substring(1); // Get remainder of word.
  740. String capitalized = firstLetter.toUpperCase() + remainder.toLowerCase();
  741. String[] info = Leaderboard.retrieveInfo(split[1].toUpperCase(), p);
  742. player.sendMessage(mcLocale.getString("mcPlayerListener.SkillLeaderboard", new Object[] {capitalized}));
  743. int n = 1 * pt; //Position
  744. for(String x : info)
  745. {
  746. if(x != null)
  747. {
  748. String digit = String.valueOf(n);
  749. if(n < 10)
  750. digit ="0"+String.valueOf(n);
  751. String[] splitx = x.split(":");
  752. //Format: 1. Playername - skill value
  753. player.sendMessage(digit+". "+ChatColor.GREEN+splitx[1]+" - "+ChatColor.WHITE+splitx[0]);
  754. n++;
  755. }
  756. }
  757. }
  758. } else {
  759. /*
  760. * MYSQL LEADERBOARDS
  761. */
  762. String powerlevel = "taming+mining+woodcutting+repair+unarmed+herbalism+excavation+archery+swords+axes+acrobatics";
  763. if(split.length >= 2 && Skills.isSkill(split[1])){
  764. /*
  765. * Create a nice consistent capitalized leaderboard name
  766. */
  767. String lowercase = split[1].toLowerCase(); //For the query
  768. String firstLetter = split[1].substring(0,1); //Get first letter
  769. String remainder = split[1].substring(1); //Get remainder of word.
  770. String capitalized = firstLetter.toUpperCase() + remainder.toLowerCase();
  771. player.sendMessage(mcLocale.getString("mcPlayerListener.SkillLeaderboard", new Object[] {capitalized}));
  772. if(split.length >= 3 && m.isInt(split[2])){
  773. int n = 1; //For the page number
  774. int n2 = Integer.valueOf(split[2]);
  775. if(n2 > 1){
  776. //Figure out the 'page' here
  777. n = 10;
  778. n = n * (n2-1);
  779. }
  780. //If a page number is specified
  781. HashMap<Integer, ArrayList<String>> userslist = mcMMO.database.Read("SELECT "+lowercase+", user_id FROM "
  782. +LoadProperties.MySQLtablePrefix+"skills WHERE "+lowercase+" > 0 ORDER BY `"+LoadProperties.MySQLtablePrefix+"skills`.`"+lowercase+"` DESC ");
  783. for(int i=n;i<=n+10;i++){
  784. if (i > userslist.size() || mcMMO.database.Read("SELECT user FROM "+LoadProperties.MySQLtablePrefix+"users WHERE id = '" + Integer.valueOf(userslist.get(i).get(1)) + "'") == null)
  785. break;
  786. HashMap<Integer, ArrayList<String>> username = mcMMO.database.Read("SELECT user FROM "+LoadProperties.MySQLtablePrefix+"users WHERE id = '" + Integer.valueOf(userslist.get(i).get(1)) + "'");
  787. player.sendMessage(String.valueOf(i)+". "+ChatColor.GREEN+userslist.get(i).get(0)+" - "+ChatColor.WHITE+username.get(1).get(0));
  788. }
  789. return true;
  790. }
  791. //If no page number is specified
  792. HashMap<Integer, ArrayList<String>> userslist = mcMMO.database.Read("SELECT "+lowercase+", user_id FROM "
  793. +LoadProperties.MySQLtablePrefix+"skills WHERE "+lowercase+" > 0 ORDER BY `"+LoadProperties.MySQLtablePrefix+"skills`.`"+lowercase+"` DESC ");
  794. for(int i=1;i<=10;i++){ //i<=userslist.size()
  795. if (i > userslist.size() || mcMMO.database.Read("SELECT user FROM "+LoadProperties.MySQLtablePrefix+"users WHERE id = '" + Integer.valueOf(userslist.get(i).get(1)) + "'") == null)
  796. break;
  797. HashMap<Integer, ArrayList<String>> username = mcMMO.database.Read("SELECT user FROM "+LoadProperties.MySQLtablePrefix+"users WHERE id = '" + Integer.valueOf(userslist.get(i).get(1)) + "'");
  798. player.sendMessage(String.valueOf(i)+". "+ChatColor.GREEN+userslist.get(i).get(0)+" - "+ChatColor.WHITE+username.get(1).get(0));
  799. }
  800. return true;
  801. }
  802. if(split.length >= 1){
  803. player.sendMessage(mcLocale.getString("mcPlayerListener.PowerLevelLeaderboard"));
  804. if(split.length >= 2 && m.isInt(split[1])){
  805. int n = 1; //For the page number
  806. int n2 = Integer.valueOf(split[1]);
  807. if(n2 > 1){
  808. //Figure out the 'page' here
  809. n = 10;
  810. n = n * (n2-1);
  811. }
  812. //If a page number is specified
  813. HashMap<Integer, ArrayList<String>> userslist = mcMMO.database.Read("SELECT "+powerlevel+", user_id FROM "
  814. +LoadProperties.MySQLtablePrefix+"skills WHERE "+powerlevel+" > 0 ORDER BY taming+mining+woodcutting+repair+unarmed+herbalism+excavation+archery+swords+axes+acrobatics DESC ");
  815. for(int i=n;i<=n+10;i++){
  816. if (i > userslist.size() || mcMMO.database.Read("SELECT user FROM "+LoadProperties.MySQLtablePrefix+"users WHERE id = '" + Integer.valueOf(userslist.get(i).get(1)) + "'") == null)
  817. break;
  818. HashMap<Integer, ArrayList<String>> username = mcMMO.database.Read("SELECT user FROM "+LoadProperties.MySQLtablePrefix+"users WHERE id = '" + Integer.valueOf(userslist.get(i).get(1)) + "'");
  819. player.sendMessage(String.valueOf(i)+". "+ChatColor.GREEN+userslist.get(i).get(0)+" - "+ChatColor.WHITE+username.get(1).get(0));
  820. }
  821. return true;
  822. }
  823. HashMap<Integer, ArrayList<String>> userslist = mcMMO.database.Read("SELECT taming+mining+woodcutting+repair+unarmed+herbalism+excavation+archery+swords+axes+acrobatics, user_id FROM "
  824. +LoadProperties.MySQLtablePrefix+"skills WHERE "+powerlevel+" > 0 ORDER BY taming+mining+woodcutting+repair+unarmed+herbalism+excavation+archery+swords+axes+acrobatics DESC ");
  825. for(int i=1;i<=10;i++){
  826. if (i > userslist.size() || mcMMO.database.Read("SELECT user FROM "+LoadProperties.MySQLtablePrefix+"users WHERE id = '" + Integer.valueOf(userslist.get(i).get(1)) + "'") == null)
  827. break;
  828. HashMap<Integer, ArrayList<String>> username = mcMMO.database.Read("SELECT user FROM "+LoadProperties.MySQLtablePrefix+"users WHERE id = '" + Integer.valueOf(userslist.get(i).get(1)) + "'");
  829. player.sendMessage(String.valueOf(i)+". "+ChatColor.GREEN+userslist.get(i).get(0)+" - "+ChatColor.WHITE+username.get(1).get(0));
  830. //System.out.println(username.get(1).get(0));
  831. //System.out.println("Mining : " + userslist.get(i).get(0) + ", User id : " + userslist.get(i).get(1));
  832. }
  833. }
  834. }
  835. }
  836. else if(LoadProperties.mcrefreshEnable && label.equalsIgnoreCase(LoadProperties.mcrefresh)){
  837. if(!mcPermissions.getInstance().mcrefresh(player)){
  838. player.sendMessage(ChatColor.YELLOW+"[mcMMO]"+ChatColor.DARK_RED +mcLocale.getString("mcPlayerListener.NoPermission"));
  839. return true;
  840. }
  841. if(split.length >= 2 && isPlayer(split[1])){
  842. player.sendMessage("You have refreshed "+split[1]+"'s cooldowns!");
  843. player = getPlayer(split[1]);
  844. }
  845. /*
  846. * PREP MODES
  847. */
  848. PP = Users.getProfile(player);
  849. PP.setRecentlyHurt((long) 0);
  850. PP.setHoePreparationMode(false);
  851. PP.setAxePreparationMode(false);
  852. PP.setFistsPreparationMode(false);
  853. PP.setSwordsPreparationMode(false);
  854. PP.setPickaxePreparationMode(false);
  855. /*
  856. * GREEN TERRA
  857. */
  858. PP.setGreenTerraMode(false);
  859. PP.setGreenTerraDeactivatedTimeStamp((long) 0);
  860. /*
  861. * GIGA DRILL BREAKER
  862. */
  863. PP.setGigaDrillBreakerMode(false);
  864. PP.setGigaDrillBreakerDeactivatedTimeStamp((long) 0);
  865. /*
  866. * SERRATED STRIKE
  867. */
  868. PP.setSerratedStrikesMode(false);
  869. PP.setSerratedStrikesDeactivatedTimeStamp((long) 0);
  870. /*
  871. * SUPER BREAKER
  872. */
  873. PP.setSuperBreakerMode(false);
  874. PP.setSuperBreakerDeactivatedTimeStamp((long) 0);
  875. /*
  876. * TREE FELLER
  877. */
  878. PP.setTreeFellerMode(false);
  879. PP.setTreeFellerDeactivatedTimeStamp((long) 0);
  880. /*
  881. * BERSERK
  882. */
  883. PP.setBerserkMode(false);
  884. PP.setBerserkDeactivatedTimeStamp((long)0);
  885. player.sendMessage(mcLocale.getString("mcPlayerListener.AbilitiesRefreshed"));
  886. }
  887. /*
  888. * GODMODE COMMAND
  889. */
  890. else if(LoadProperties.mcgodEnable && label.equalsIgnoreCase(LoadProperties.mcgod))
  891. {
  892. if(mcPermissions.permissionsEnabled)
  893. {
  894. if(!mcPermissions.getInstance().mcgod(player))
  895. {
  896. player.sendMessage(ChatColor.YELLOW+"[mcMMO]"+ChatColor.DARK_RED +mcLocale.getString("mcPlayerListener.NoPermission"));
  897. return true;
  898. }
  899. if(PP.getGodMode())
  900. {
  901. player.sendMessage(mcLocale.getString("mcPlayerListener.GodModeDisabled"));
  902. PP.toggleGodMode();
  903. } else
  904. {
  905. player.sendMessage(mcLocale.getString("mcPlayerListener.GodModeEnabled"));
  906. PP.toggleGodMode();
  907. }
  908. }
  909. }
  910. else if(LoadProperties.clearmyspawnEnable && LoadProperties.enableMySpawn && label.equalsIgnoreCase(LoadProperties.clearmyspawn) && mcPermissions.getInstance().mySpawn(player))
  911. {
  912. double x = this.getServer().getWorlds().get(0).getSpawnLocation().getX();
  913. double y = this.getServer().getWorlds().get(0).getSpawnLocation().getY();
  914. double z = this.getServer().getWorlds().get(0).getSpawnLocation().getZ();
  915. String worldname = this.getServer().getWorlds().get(0).getName();
  916. PP.setMySpawn(x, y, z, worldname);
  917. player.sendMessage(mcLocale.getString("mcPlayerListener.MyspawnCleared"));
  918. }
  919. else if(LoadProperties.mmoeditEnable && mcPermissions.permissionsEnabled && label.equalsIgnoreCase(""+LoadProperties.mmoedit))
  920. {
  921. if(!mcPermissions.getInstance().mmoedit(player))
  922. {
  923. player.sendMessage(ChatColor.YELLOW+"[mcMMO]"+ChatColor.DARK_RED +mcLocale.getString("mcPlayerListener.NoPermission"));
  924. return true;
  925. }
  926. if(split.length < 3)
  927. {
  928. player.sendMessage(ChatColor.RED+"Usage is /"+LoadProperties.mmoedit+" playername skillname newvalue");
  929. return true;
  930. }
  931. if(split.length == 4)
  932. {
  933. if(isPlayer(split[1]) && m.isInt(split[3]) && Skills.isSkill(split[2]))
  934. {
  935. int newvalue = Integer.valueOf(split[3]);
  936. Users.getProfile(getPlayer(split[1])).modifyskill(Skills.getSkillType(split[2]), newvalue);
  937. player.sendMessage(ChatColor.RED+split[2]+" has been modified.");
  938. }
  939. }
  940. else if(split.length == 3)
  941. {
  942. if(m.isInt(split[2]) && Skills.isSkill(split[1]))
  943. {
  944. int newvalue = Integer.valueOf(split[2]);
  945. PP.modifyskill(Skills.getSkillType(split[1]), newvalue);
  946. player.sendMessage(ChatColor.RED+split[1]+" has been modified.");
  947. }
  948. } else
  949. {
  950. player.sendMessage(ChatColor.RED+"Usage is /"+LoadProperties.mmoedit+" playername skillname newvalue");
  951. }
  952. }
  953. /*
  954. * ADD EXPERIENCE COMMAND
  955. */
  956. else if(LoadProperties.addxpEnable && mcPermissions.permissionsEnabled && label.equalsIgnoreCase(LoadProperties.addxp)){
  957. if(!mcPermissions.getInstance().mmoedit(player)){
  958. player.sendMessage(ChatColor.YELLOW+"[mcMMO]"+ChatColor.DARK_RED +mcLocale.getString("mcPlayerListener.NoPermission"));
  959. return true;
  960. }
  961. if(split.length < 3){
  962. player.sendMessage(ChatColor.RED+"Usage is /"+LoadProperties.addxp+" playername skillname xp");
  963. return true;
  964. }
  965. if(split.length == 4){
  966. if(isPlayer(split[1]) && m.isInt(split[3]) && Skills.isSkill(split[2]))
  967. {
  968. int newvalue = Integer.valueOf(split[3]);
  969. Users.getProfile(getPlayer(split[1])).addXP(Skills.getSkillType(split[2]), newvalue);
  970. getPlayer(split[1]).sendMessage(ChatColor.GREEN+"Experience granted!");
  971. player.sendMessage(ChatColor.RED+split[2]+" has been modified.");
  972. Skills.XpCheckAll(getPlayer(split[1]));
  973. }
  974. }
  975. else if(split.length == 3 && m.isInt(split[2]) && Skills.isSkill(split[1]))
  976. {
  977. int newvalue = Integer.valueOf(split[2]);
  978. Users.getProfile(player).addXP(Skills.getSkillType(split[1]), newvalue);
  979. player.sendMessage(ChatColor.RED+split[1]+" has been modified.");
  980. } else {
  981. player.sendMessage(ChatColor.RED+"Usage is /"+LoadProperties.addxp+" playername skillname xp");
  982. }
  983. }
  984. else if(LoadProperties.ptpEnable && label.equalsIgnoreCase(LoadProperties.ptp) && PP != null && PP.inParty()){
  985. if(!mcPermissions.getInstance().partyTeleport(player)){
  986. player.sendMessage(ChatColor.YELLOW+"[mcMMO]"+ChatColor.DARK_RED +mcLocale.getString("mcPlayerListener.NoPermission"));
  987. return true;
  988. }
  989. if(split.length < 2){
  990. player.sendMessage(ChatColor.RED+"Usage is /"+LoadProperties.ptp+" <playername>");
  991. return true;
  992. }
  993. if(!isPlayer(split[1])){
  994. player.sendMessage("That is not a valid player");
  995. }
  996. if(isPlayer(split[1])){
  997. Player target = getPlayer(split[1]);
  998. PlayerProfile PPt = Users.getProfile(target);
  999. if(PP.getParty().equals(PPt.getParty())){
  1000. player.teleport(target);
  1001. player.sendMessage(ChatColor.GREEN+"You have teleported to "+target.getName());
  1002. target.sendMessage(ChatColor.GREEN+player.getName() + " has teleported to you.");
  1003. }
  1004. }
  1005. }
  1006. /*
  1007. * WHOIS COMMAND
  1008. */
  1009. else if(LoadProperties.whoisEnable && label.equalsIgnoreCase(LoadProperties.whois) && mcPermissions.getInstance().whois(player)){
  1010. if(split.length < 2){
  1011. player.sendMessage(ChatColor.RED + "Proper usage is /"+LoadProperties.whois+" <playername>");
  1012. return true;
  1013. }
  1014. //if split[1] is a player
  1015. if(isPlayer(split[1]))
  1016. {
  1017. Player target = getPlayer(split[1]);
  1018. PlayerProfile PPt = Users.getProfile(target);
  1019. double x,y,z;
  1020. x = target.getLocation().getX();
  1021. y = target.getLocation().getY();
  1022. z = target.getLocation().getZ();
  1023. player.sendMessage(ChatColor.GREEN + "~~WHOIS RESULTS~~");
  1024. player.sendMessage(target.getName());
  1025. if(PPt.inParty())
  1026. player.sendMessage("Party: "+PPt.getParty());
  1027. player.sendMessage("Health: "+target.getHealth()+ChatColor.GRAY+" (20 is full health)");
  1028. player.sendMessage("OP: " + target.isOp());
  1029. player.sendMessage(ChatColor.GREEN+"mcMMO Stats for "+ChatColor.YELLOW+target.getName());
  1030. player.sendMessage(ChatColor.GOLD+"-=GATHERING SKILLS=-");
  1031. if(mcPermissions.getInstance().excavation(target))
  1032. player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.ExcavationSkill"), PPt.getSkillLevel(SkillType.EXCAVATION), PPt.getSkillXpLevel(SkillType.EXCAVATION), PPt.getXpToLevel(SkillType.EXCAVATION)));
  1033. if(mcPermissions.getInstance().herbalism(target))
  1034. player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.HerbalismSkill"), PPt.getSkillLevel(SkillType.HERBALISM), PPt.getSkillXpLevel(SkillType.HERBALISM), PPt.getXpToLevel(SkillType.HERBALISM)));
  1035. if(mcPermissions.getInstance().mining(target))
  1036. player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.MiningSkill"), PPt.getSkillLevel(SkillType.MINING), PPt.getSkillXpLevel(SkillType.MINING), PPt.getXpToLevel(SkillType.MINING)));
  1037. if(mcPermissions.getInstance().woodCuttingAbility(target))
  1038. player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.WoodcuttingSkill"), PPt.getSkillLevel(SkillType.WOODCUTTING), PPt.getSkillXpLevel(SkillType.WOODCUTTING), PPt.getXpToLevel(SkillType.WOODCUTTING)));
  1039. player.sendMessage(ChatColor.GOLD+"-=COMBAT SKILLS=-");
  1040. if(mcPermissions.getInstance().axes(target))
  1041. player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.AxesSkill"), PPt.getSkillLevel(SkillType.AXES), PPt.getSkillXpLevel(SkillType.AXES), PPt.getXpToLevel(SkillType.AXES)));
  1042. if(mcPermissions.getInstance().archery(player))
  1043. player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.ArcherySkill"), PPt.getSkillLevel(SkillType.ARCHERY), PPt.getSkillXpLevel(SkillType.ARCHERY), PPt.getXpToLevel(SkillType.ARCHERY)));
  1044. //if(mcPermissions.getInstance().sorcery(target))
  1045. //player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.SorcerySkill"), PPt.getSkill("sorcery"), PPt.getSkill("sorceryXP"), PPt.getXpToLevel("excavation")));
  1046. if(mcPermissions.getInstance().swords(target))
  1047. player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.SwordsSkill"), PPt.getSkillLevel(SkillType.SWORDS), PPt.getSkillXpLevel(SkillType.SWORDS), PPt.getXpToLevel(SkillType.SWORDS)));
  1048. if(mcPermissions.getInstance().taming(target))
  1049. player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.TamingSkill"), PPt.getSkillLevel(SkillType.TAMING), PPt.getSkillXpLevel(SkillType.TAMING), PPt.getXpToLevel(SkillType.TAMING)));
  1050. if(mcPermissions.getInstance().unarmed(target))
  1051. player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.UnarmedSkill"), PPt.getSkillLevel(SkillType.UNARMED), PPt.getSkillXpLevel(SkillType.UNARMED), PPt.getXpToLevel(SkillType.UNARMED)));
  1052. player.sendMessage(ChatColor.GOLD+"-=MISC SKILLS=-");
  1053. if(mcPermissions.getInstance().acrobatics(target))
  1054. player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.AcrobaticsSkill"), PPt.getSkillLevel(SkillType.ACROBATICS), PPt.getSkillXpLevel(SkillType.ACROBATICS), PPt.getXpToLevel(SkillType.ACROBATICS)));
  1055. if(mcPermissions.getInstance().repair(target))
  1056. player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.RepairSkill"), PPt.getSkillLevel(SkillType.REPAIR), PPt.getSkillXpLevel(SkillType.REPAIR), PPt.getXpToLevel(SkillType.REPAIR)));
  1057. player.sendMessage(mcLocale.getString("mcPlayerListener.PowerLevel") +ChatColor.GREEN+(m.getPowerLevel(target)));
  1058. player.sendMessage(ChatColor.GREEN+"~~COORDINATES~~");
  1059. player.sendMessage("X: "+x);
  1060. player.sendMessage("Y: "+y);
  1061. player.sendMessage("Z: "+z);
  1062. }
  1063. }
  1064. /*
  1065. * STATS COMMAND
  1066. */
  1067. else if(LoadProperties.statsEnable && label.equalsIgnoreCase(LoadProperties.stats))
  1068. {
  1069. player.sendMessage(mcLocale.getString("mcPlayerListener.YourStats"));
  1070. if(mcPermissions.getEnabled())
  1071. player.sendMessage(mcLocale.getString("mcPlayerListener.NoSkillNote"));
  1072. ChatColor header = ChatColor.GOLD;
  1073. if(Skills.hasGatheringSkills(player)){
  1074. player.sendMessage(header+"-=GATHERING SKILLS=-");
  1075. if(mcPermissions.getInstance().excavation(player))
  1076. player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.ExcavationSkill"), PP.getSkillLevel(SkillType.EXCAVATION), PP.getSkillXpLevel(SkillType.EXCAVATION), PP.getXpToLevel(SkillType.EXCAVATION)));
  1077. if(mcPermissions.getInstance().herbalism(player))
  1078. player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.HerbalismSkill"), PP.getSkillLevel(SkillType.HERBALISM), PP.getSkillXpLevel(SkillType.HERBALISM), PP.getXpToLevel(SkillType.HERBALISM)));
  1079. if(mcPermissions.getInstance().mining(player))
  1080. player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.MiningSkill"), PP.getSkillLevel(SkillType.MINING), PP.getSkillXpLevel(SkillType.MINING), PP.getXpToLevel(SkillType.MINING)));
  1081. if(mcPermissions.getInstance().woodcutting(player))
  1082. player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.WoodcuttingSkill"), PP.getSkillLevel(SkillType.WOODCUTTING), PP.getSkillXpLevel(SkillType.WOODCUTTING), PP.getXpToLevel(SkillType.WOODCUTTING)));
  1083. }
  1084. if(Skills.hasCombatSkills(player)){
  1085. player.sendMessage(header+"-=COMBAT SKILLS=-");
  1086. if(mcPermissions.getInstance().axes(player))
  1087. player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.AxesSkill"), PP.getSkillLevel(SkillType.AXES), PP.getSkillXpLevel(SkillType.AXES), PP.getXpToLevel(SkillType.AXES)));
  1088. if(mcPermissions.getInstance().archery(player))
  1089. player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.ArcherySkill"), PP.getSkillLevel(SkillType.ARCHERY), PP.getSkillXpLevel(SkillType.ARCHERY), PP.getXpToLevel(SkillType.ARCHERY)));
  1090. //if(mcPermissions.getInstance().sorcery(player))
  1091. //player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.SorcerySkill"), PP.getSkill("sorcery"), PP.getSkill("sorceryXP"), PP.getXpToLevel("excavation")));
  1092. if(mcPermissions.getInstance().swords(player))
  1093. player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.SwordsSkill"), PP.getSkillLevel(SkillType.SWORDS), PP.getSkillXpLevel(SkillType.SWORDS), PP.getXpToLevel(SkillType.SWORDS)));
  1094. if(mcPermissions.getInstance().taming(player))
  1095. player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.TamingSkill"), PP.getSkillLevel(SkillType.TAMING), PP.getSkillXpLevel(SkillType.TAMING), PP.getXpToLevel(SkillType.TAMING)));
  1096. if(mcPermissions.getInstance().unarmed(player))
  1097. player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.UnarmedSkill"), PP.getSkillLevel(SkillType.UNARMED), PP.getSkillXpLevel(SkillType.UNARMED), PP.getXpToLevel(SkillType.UNARMED)));
  1098. }
  1099. if(Skills.hasMiscSkills(player)){
  1100. player.sendMessage(header+"-=MISC SKILLS=-");
  1101. if(mcPermissions.getInstance().acrobatics(player))
  1102. player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.AcrobaticsSkill"), PP.getSkillLevel(SkillType.ACROBATICS), PP.getSkillXpLevel(SkillType.ACROBATICS), PP.getXpToLevel(SkillType.ACROBATICS)));
  1103. if(mcPermissions.getInstance().repair(player))
  1104. player.sendMessage(Skills.getSkillStats(mcLocale.getString("mcPlayerListener.RepairSkill"), PP.getSkillLevel(SkillType.REPAIR), PP.getSkillXpLevel(SkillType.REPAIR), PP.getXpToLevel(SkillType.REPAIR)));
  1105. }
  1106. player.sendMessage(mcLocale.getString("mcPlayerListener.PowerLevel")+ChatColor.GREEN+(m.getPowerLevel(player)));
  1107. }
  1108. //Invite Command
  1109. else if(LoadProperties.inviteEnable && label.equalsIgnoreCase(LoadProperties.invite) && mcPermissions.getInstance().party(player)){
  1110. if(!PP.inParty())
  1111. {
  1112. player.sendMessage(mcLocale.getString("mcPlayerListener.NotInParty"));
  1113. return true;
  1114. }
  1115. if(split.length < 2)
  1116. {
  1117. player.sendMessage(ChatColor.RED+"Usage is /"+LoadProperties.invite+" <playername>");
  1118. return true;
  1119. }
  1120. if(PP.inParty() && split.length >= 2 && isPlayer(split[1]))
  1121. {
  1122. Player target = getPlayer(split[1]);
  1123. PlayerProfile PPt = Users.getProfile(target);
  1124. PPt.modifyInvite(PP.getParty());
  1125. player.sendMessage(mcLocale.getString("mcPlayerListener.InviteSuccess"));
  1126. //target.sendMessage(ChatColor.RED+"ALERT: "+ChatColor.GREEN+"You have received a party invite for "+PPt.getInvite()+" from "+player.getName());
  1127. target.sendMessage(mcLocale.getString("mcPlayerListener.ReceivedInvite1", new Object[] {PPt.getInvite(), player.getName()}));
  1128. //target.sendMessage(ChatColor.YELLOW+"Type "+ChatColor.GREEN+LoadProperties.accept+ChatColor.YELLOW+" to accept the invite");
  1129. target.sendMessage(mcLocale.getString("mcPlayerListener.ReceivedInvite2", new Object[] {LoadProperties.accept}));
  1130. }
  1131. }
  1132. //Accept invite
  1133. else if(LoadProperties.acceptEnable && label.equalsIgnoreCase(LoadProperties.accept) && mcPermissions.getInstance().party(player)){
  1134. if(PP.hasPartyInvite()){
  1135. if(PP.inParty()){
  1136. Party.getInstance().informPartyMembersQuit(player, getPlayersOnline());
  1137. }
  1138. PP.acceptInvite();
  1139. Party.getInstance().informPartyMembers(player, getPlayersOnline());
  1140. player.sendMessage(mcLocale.getString("mcPlayerListener.InviteAccepted", new Object[]{PP.getParty()}));
  1141. } else {
  1142. player.sendMessage(mcLocale.getString("mcPlayerListener.NoInvites"));
  1143. }
  1144. }
  1145. //Party command
  1146. else if(LoadProperties.partyEnable && label.equalsIgnoreCase(LoadProperties.party)){
  1147. if(!mcPermissions.getInstance().party(player)){
  1148. player.sendMessage(ChatColor.YELLOW+"[mcMMO]"+ChatColor.DARK_RED +mcLocale.getString("mcPlayerListener.NoPermission"));
  1149. return true;
  1150. }
  1151. if(split.length == 1 && !PP.inParty()){
  1152. player.sendMessage("Proper usage is "+LoadProperties.party+" <name> or 'q' to quit");
  1153. return true;
  1154. }
  1155. if(split.length == 1 && PP.inParty()){
  1156. String tempList = "";
  1157. int x = 0;
  1158. for(Player p : this.getServer().getOnlinePlayers()){
  1159. if(PP.getParty().equals(Users.getProfile(p).getParty())){
  1160. if(p != null && x+1 >= Party.getInstance().partyCount(player, getPlayersOnline())){
  1161. tempList+= p.getName();
  1162. x++;
  1163. }
  1164. if(p != null && x < Party.getInstance().partyCount(player, getPlayersOnline())){
  1165. tempList+= p.getName() +", ";
  1166. x++;
  1167. }
  1168. }
  1169. }
  1170. player.sendMessage(mcLocale.getString("mcPlayerListener.YouAreInParty", new Object[] {PP.getParty()}));
  1171. player.sendMessage(mcLocale.getString("mcPlayerListener.PartyMembers")+" ("+ChatColor.WHITE+tempList+ChatColor.GREEN+")");
  1172. }
  1173. if(split.length > 1 && split[1].equals("q") && PP.inParty()){
  1174. Party.getInstance().informPartyMembersQuit(player, getPlayersOnline());
  1175. PP.removeParty();
  1176. player.sendMessage(mcLocale.getString("mcPlayerListener.LeftParty"));
  1177. return true;
  1178. }
  1179. if(split.length >= 2){
  1180. if(PP.inParty())
  1181. Party.getInstance().informPartyMembersQuit(player, getPlayersOnline());
  1182. PP.setParty(split[1]);
  1183. player.sendMessage(mcLocale.getString("mcPlayerListener.JoinedParty", new Object[] {split[1]}));
  1184. Party.getInstance().informPartyMembers(player, getPlayersOnline());
  1185. }
  1186. }
  1187. else if(LoadProperties.partyEnable && label.equalsIgnoreCase("p")){
  1188. // Console message?
  1189. if(!(sender instanceof Player))
  1190. {
  1191. if(args.length < 2) return true;
  1192. String pMessage = args[1];
  1193. for (int i = 2; i <= args.length - 1; i++) {
  1194. pMessage = pMessage + " " + args[i];
  1195. }
  1196. String pPrefix = ChatColor.GREEN + "(" + ChatColor.WHITE
  1197. + "*Console*" + ChatColor.GREEN + ") ";
  1198. log.log(Level.INFO,
  1199. "[P](" + args[0] + ")" + "<*Console*> "
  1200. + pMessage);
  1201. for(Player herp : getServer().getOnlinePlayers()) {
  1202. if(Users.getProfile(herp).inParty()) {
  1203. log.info(Users.getProfile(herp).getParty());
  1204. if(Users.getProfile(herp).getParty().equalsIgnoreCase(args[0])) {
  1205. herp.sendMessage(pPrefix + pMessage);
  1206. }
  1207. }
  1208. }
  1209. return true;
  1210. }
  1211. if(!mcPermissions.getInstance().party(player)){
  1212. player.sendMessage(ChatColor.YELLOW+"[mcMMO]"+ChatColor.DARK_RED +mcLocale.getString("mcPlayerListener.NoPermission"));
  1213. return true;
  1214. }
  1215. // Not a toggle, a message
  1216. if (args.length >= 1) {
  1217. String pMessage = args[0];
  1218. for (int i = 1; i <= args.length - 1; i++) {
  1219. pMessage = pMessage + " " + args[i];
  1220. }
  1221. String pPrefix = ChatColor.GREEN + "(" + ChatColor.WHITE
  1222. + player.getName() + ChatColor.GREEN + ") ";
  1223. log.log(Level.INFO,
  1224. "[P](" + PP.getParty() + ")" + "<" + player.getName()
  1225. + "> " + pMessage);
  1226. for (Player herp : getServer().getOnlinePlayers()) {
  1227. if (Users.getProfile(herp).inParty()) {
  1228. if (Party.getInstance().inSameParty(herp, player))
  1229. herp.sendMessage(pPrefix + pMessage);
  1230. }
  1231. }
  1232. return true;
  1233. }
  1234. if(PP.getAdminChatMode())
  1235. PP.toggleAdminChat();
  1236. PP.togglePartyChat();
  1237. if(PP.getPartyChatMode()){
  1238. //player.sendMessage(ChatColor.GREEN + "Party Chat Toggled On");
  1239. player.sendMessage(mcLocale.getString("mcPlayerListener.PartyChatOn"));
  1240. } else {
  1241. //player.sendMessage(ChatColor.GREEN + "Party Chat Toggled " + ChatColor.RED + "Off");
  1242. player.sendMessage(mcLocale.getString("mcPlayerListener.PartyChatOff"));
  1243. }
  1244. }
  1245. else if(label.equalsIgnoreCase("a")){
  1246. // Console message?
  1247. if(!(sender instanceof Player) && args.length >= 1)
  1248. {
  1249. String aMessage = args[0];
  1250. for (int i = 1; i <= args.length - 1; i++) {
  1251. aMessage = aMessage + " " + args[i];
  1252. }
  1253. String aPrefix = ChatColor.AQUA + "{" + ChatColor.WHITE
  1254. + "*Console*" + ChatColor.AQUA + "} ";
  1255. log.log(Level.INFO, "[A]<*Console*> "
  1256. + aMessage);
  1257. for (Player herp : getServer().getOnlinePlayers()) {
  1258. if (mcPermissions.getInstance().adminChat(herp))
  1259. herp.sendMessage(aPrefix + aMessage);
  1260. }
  1261. return true;
  1262. }
  1263. if(!mcPermissions.getInstance().adminChat(player)){
  1264. player.sendMessage(ChatColor.YELLOW+"[mcMMO]"+ChatColor.DARK_RED +mcLocale.getString("mcPlayerListener.NoPermission"));
  1265. return true;
  1266. }
  1267. // Not a toggle, a message
  1268. if (args.length >= 1) {
  1269. String aMessage = args[0];
  1270. for (int i = 1; i <= args.length - 1; i++) {
  1271. aMessage = aMessage + " " + args[i];
  1272. }
  1273. String aPrefix = ChatColor.AQUA + "{" + ChatColor.WHITE
  1274. + player.getName() + ChatColor.AQUA + "} ";
  1275. log.log(Level.INFO, "[A]<" + player.getName() + "> "
  1276. + aMessage);
  1277. for (Player herp : getServer().getOnlinePlayers()) {
  1278. if (mcPermissions.getInstance().adminChat(herp))
  1279. herp.sendMessage(aPrefix + aMessage);
  1280. }
  1281. return true;
  1282. }
  1283. if(PP.getPartyChatMode())
  1284. PP.togglePartyChat();
  1285. PP.toggleAdminChat();
  1286. if(PP.getAdminChatMode())
  1287. {
  1288. player.sendMessage(mcLocale.getString("mcPlayerListener.AdminChatOn"));
  1289. //player.sendMessage(ChatColor.AQUA + "Admin chat toggled " + ChatColor.GREEN + "On");
  1290. } else {
  1291. player.sendMessage(mcLocale.getString("mcPlayerListener.AdminChatOff"));
  1292. //player.sendMessage(ChatColor.AQUA + "Admin chat toggled " + ChatColor.RED + "Off");
  1293. }
  1294. }
  1295. /*
  1296. * MYSPAWN
  1297. */
  1298. else if(LoadProperties.myspawnEnable && LoadProperties.enableMySpawn && label.equalsIgnoreCase(LoadProperties.myspawn)){
  1299. if(!mcPermissions.getInstance().mySpawn(player)){
  1300. player.sendMessage(ChatColor.YELLOW+"[mcMMO]"+ChatColor.DARK_RED +mcLocale.getString("mcPlayerListener.NoPermission"));
  1301. return true;
  1302. }
  1303. if(System.currentTimeMillis() < PP.getMySpawnATS() + 3600000){
  1304. long x = ((PP.getMySpawnATS() + 3600000) - System.currentTimeMillis());
  1305. int y = (int) (x/60000);
  1306. int z = (int) ((x/1000) - (y*60));
  1307. player.sendMessage(mcLocale.getString("mcPlayerListener.MyspawnTimeNotice", new Object[] {y, z}));
  1308. return true;
  1309. }
  1310. PP.setMySpawnATS(System.currentTimeMillis());
  1311. if(PP.getMySpawn(player) != null){
  1312. Location mySpawn = PP.getMySpawn(player);
  1313. if(mySpawn != null && this.getServer().getWorld(PP.getMySpawnWorld(this)) != null)
  1314. mySpawn.setWorld(this.getServer().getWorld(PP.getMySpawnWorld(this)));
  1315. if(mySpawn != null){
  1316. //It's done twice because it acts oddly when you are in another world
  1317. player.teleport(mySpawn);
  1318. player.teleport(mySpawn);
  1319. }
  1320. } else {
  1321. player.sendMessage(mcLocale.getString("mcPlayerListener.MyspawnNotExist"));
  1322. }
  1323. }
  1324. return true;
  1325. }
  1326. public Player[] getPlayersOnline() {
  1327. return this.getServer().getOnlinePlayers();
  1328. }
  1329. public boolean isPlayer(String playerName){
  1330. for(Player herp : getPlayersOnline()){
  1331. if(herp.getName().toLowerCase().equals(playerName.toLowerCase())){
  1332. return true;
  1333. }
  1334. }
  1335. return false;
  1336. }
  1337. public Player getPlayer(String playerName){
  1338. for(Player herp : getPlayersOnline()){
  1339. if(herp.getName().toLowerCase().equals(playerName.toLowerCase())){
  1340. return herp;
  1341. }
  1342. }
  1343. return null;
  1344. }
  1345. }