/src/com/gmail/nossr50/mcMMO.java
Java | 303 lines | 226 code | 40 blank | 37 comment | 27 complexity | 213e58865e485d0f44ce6f7ec098f1ed MD5 | raw file
- package com.gmail.nossr50;
- import com.gmail.nossr50.datatypes.Mob;
- import com.gmail.nossr50.datatypes.PlayerProfile;
- import com.gmail.nossr50.datatypes.SkillType;
- import com.gmail.nossr50.command.Commands;
- import com.gmail.nossr50.config.*;
- import com.gmail.nossr50.spout.SpoutStuff;
- import com.gmail.nossr50.spout.mmoHelper;
- import com.gmail.nossr50.listeners.mcBlockListener;
- import com.gmail.nossr50.listeners.mcEntityListener;
- import com.gmail.nossr50.listeners.mcPlayerListener;
- import com.gmail.nossr50.party.Party;
- import com.gmail.nossr50.skills.*;
- import com.nijikokun.bukkit.Permissions.Permissions;
- import org.bukkit.Bukkit;
- import java.io.BufferedInputStream;
- import java.io.BufferedReader;
- import java.io.BufferedWriter;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.FileReader;
- import java.io.FileWriter;
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.logging.Level;
- import java.util.logging.Logger;
- import org.bukkit.command.Command;
- import org.bukkit.command.CommandSender;
- import org.bukkit.event.Event.Priority;
- import org.bukkit.event.Event;
- import org.bukkit.plugin.PluginDescriptionFile;
- import org.bukkit.plugin.java.JavaPlugin;
- import org.bukkit.plugin.PluginManager;
- import org.bukkit.entity.Player;
- import org.getspout.spoutapi.SpoutManager;
- import org.getspout.spoutapi.player.FileManager;
- public class mcMMO extends JavaPlugin
- {
- /*
- * I never expected mcMMO to get so popular!
- * Thanks for all the support for the mod
- * Thanks to the people who have worked on the code
- * Thanks to the donators who helped me out financially
- * Thanks to the server admins who use my mod :)
- *
- * This mod is open source, and its going to stay that way >:3
- *
- * Donate via paypal to nossr50@gmail.com (A million thanks to anyone that does!)
- */
-
- public static String maindirectory = "plugins" + File.separator + "mcMMO";
- File file = new File(maindirectory + File.separator + "config.yml");
- static File versionFile = new File(maindirectory + File.separator + "VERSION");
- public static final Logger log = Logger.getLogger("Minecraft");
-
- private final mcPlayerListener playerListener = new mcPlayerListener(this);
- private final mcBlockListener blockListener = new mcBlockListener(this);
- private final mcEntityListener entityListener = new mcEntityListener(this);
-
- public static mcPermissions permissionHandler = new mcPermissions();
- private Permissions permissions;
- private Runnable mcMMO_Timer = new mcTimer(this); //BLEED AND REGENERATION
- //private Timer mcMMO_SpellTimer = new Timer(true);
- public static Database database = null;
- public Mob mob = new Mob();
- public Misc misc = new Misc(this);
- //Config file stuff
- LoadProperties config = new LoadProperties();
- //Jar stuff
- public static File mcmmo;
- public void onEnable()
- {
- mcmmo = this.getFile();
- new File(maindirectory).mkdir();
-
- if(!versionFile.exists())
- {
- updateVersion();
- } else
- {
- String vnum = readVersion();
- //This will be changed to whatever version preceded when we actually need updater code.
- //Version 1.0.48 is the first to implement this, no checking before that version can be done.
- if(vnum.equalsIgnoreCase("1.0.48")) {
- updateFrom(1);
- }
- //Just add in more else if blocks for versions that need updater code. Increment the updateFrom age int as we do so.
- //Catch all for versions not matching and no specific code being needed
- else if(!vnum.equalsIgnoreCase(this.getDescription().getVersion())) updateFrom(-1);
- }
-
- mcPermissions.initialize(getServer());
-
- config.configCheck();
-
- Party.getInstance().loadParties();
- new Party(this);
-
- if(!LoadProperties.useMySQL)
- Users.getInstance().loadUsers(); //Load Users file
- /*
- * REGISTER EVENTS
- */
- PluginManager pm = getServer().getPluginManager();
-
- if(pm.getPlugin("Spout") != null)
- LoadProperties.spoutEnabled = true;
- else
- LoadProperties.spoutEnabled = false;
- //Player Stuff
- pm.registerEvent(Event.Type.PLAYER_QUIT, playerListener, Priority.Normal, this);
- pm.registerEvent(Event.Type.PLAYER_JOIN, playerListener, Priority.Normal, this);
- pm.registerEvent(Event.Type.PLAYER_LOGIN, playerListener, Priority.Normal, this);
- pm.registerEvent(Event.Type.PLAYER_CHAT, playerListener, Priority.Lowest, this);
- pm.registerEvent(Event.Type.PLAYER_INTERACT, playerListener, Priority.Monitor, this);
- pm.registerEvent(Event.Type.PLAYER_RESPAWN, playerListener, Priority.Normal, this);
- pm.registerEvent(Event.Type.PLAYER_PICKUP_ITEM, playerListener, Priority.Normal, this);
- //Block Stuff
- pm.registerEvent(Event.Type.BLOCK_DAMAGE, blockListener, Priority.Highest, this);
- pm.registerEvent(Event.Type.BLOCK_BREAK, blockListener, Priority.Monitor, this);
- pm.registerEvent(Event.Type.BLOCK_FROMTO, blockListener, Priority.Normal, this);
- pm.registerEvent(Event.Type.BLOCK_PLACE, blockListener, Priority.Normal, this);
- //Entity Stuff
- pm.registerEvent(Event.Type.ENTITY_TARGET, entityListener, Priority.Normal, this);
- pm.registerEvent(Event.Type.ENTITY_DEATH, entityListener, Priority.Normal, this);
- pm.registerEvent(Event.Type.ENTITY_DAMAGE, entityListener, Priority.Monitor, this);
- pm.registerEvent(Event.Type.CREATURE_SPAWN, entityListener, Priority.Normal, this);
-
- //Spout Stuff
- if(LoadProperties.spoutEnabled)
- {
- SpoutStuff.setupSpoutConfigs();
- SpoutStuff.registerCustomEvent();
- SpoutStuff.extractFiles(); //Extract source materials
-
- FileManager FM = SpoutManager.getFileManager();
- FM.addToPreLoginCache(this, SpoutStuff.getFiles());
-
- Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(this,
- new Runnable() {
- @Override
- public void run() {
- mmoHelper.updateAll();
- }
- }, 20, 20);
- }
- PluginDescriptionFile pdfFile = this.getDescription();
- mcPermissions.initialize(getServer());
- if(LoadProperties.useMySQL)
- {
- database = new Database(this);
- database.createStructure();
- } else
- Leaderboard.makeLeaderboards(); //Make the leaderboards
- for(Player player : getServer().getOnlinePlayers()){Users.addUser(player);} //In case of reload add all users back into PlayerProfile
- System.out.println(pdfFile.getName() + " version " + pdfFile.getVersion() + " is enabled!" );
-
- Bukkit.getServer().getScheduler().scheduleAsyncRepeatingTask(this, mcMMO_Timer, 0, 20);
- }
- public PlayerProfile getPlayerProfile(Player player)
- {
- return Users.getProfile(player);
- }
-
- public void checkXp(Player player, SkillType skillType)
- {
- if(skillType == SkillType.ALL)
- Skills.XpCheckAll(player);
- else
- Skills.XpCheckSkill(skillType, player);
- }
-
- public boolean inSameParty(Player playera, Player playerb)
- {
- if(Users.getProfile(playera).inParty() && Users.getProfile(playerb).inParty()){
- if(Users.getProfile(playera).getParty().equals(Users.getProfile(playerb).getParty())){
- return true;
- } else {
- return false;
- }
- } else {
- return false;
- }
- }
- public ArrayList<String> getParties(){
- String location = "plugins/mcMMO/mcmmo.users";
- ArrayList<String> parties = new ArrayList<String>();
- try {
- //Open the users file
- FileReader file = new FileReader(location);
- BufferedReader in = new BufferedReader(file);
- String line = "";
- while((line = in.readLine()) != null)
- {
- String[] character = line.split(":");
- String theparty = null;
- //Party
- if(character.length > 3)
- theparty = character[3];
- if(!parties.contains(theparty))
- parties.add(theparty);
- }
- in.close();
- } catch (Exception e) {
- log.log(Level.SEVERE, "Exception while reading "
- + location + " (Are you sure you formatted it correctly?)", e);
- }
- return parties;
- }
- public static String getPartyName(Player player){
- PlayerProfile PP = Users.getProfile(player);
- return PP.getParty();
- }
- public static boolean inParty(Player player){
- PlayerProfile PP = Users.getProfile(player);
- return PP.inParty();
- }
- public Permissions getPermissions() {
- return permissions;
- }
- public void onDisable() {
- Bukkit.getServer().getScheduler().cancelTasks(this);
- System.out.println("mcMMO was disabled.");
- }
- public boolean onCommand(CommandSender sender, Command command, String label, String[] args)
- {
- return Commands.processCommands(sender, command, label, args);
- }
- /*
- * It is important to always assume that you are updating from the lowest possible version.
- * Thus, every block of updater code should be complete and self-contained; finishing all
- * SQL transactions and closing all file handlers, such that the next block of updater code
- * if called will handle updating as expected.
- */
- public void updateFrom(int age) {
- //No updater code needed, just update the version.
- if(age == -1) {
- updateVersion();
- return;
- }
- //Updater code from age 1 goes here
- if(age <= 1) {
- //Since age 1 is an example for now, we will just let it do nothing.
-
- }
- //If we are updating from age 1 but we need more to reach age 2, this will run too.
- if(age <= 2) {
-
- }
- updateVersion();
- }
-
- public void updateVersion() {
- try {
- versionFile.createNewFile();
- BufferedWriter vout = new BufferedWriter(new FileWriter(versionFile));
- vout.write(this.getDescription().getVersion());
- vout.close();
- } catch (IOException ex) {
- ex.printStackTrace();
- } catch (SecurityException ex) {
- ex.printStackTrace();
- }
- }
- public String readVersion() {
- byte[] buffer = new byte[(int) versionFile.length()];
- BufferedInputStream f = null;
- try {
- f = new BufferedInputStream(new FileInputStream(versionFile));
- f.read(buffer);
- } catch (FileNotFoundException ex) {
- ex.printStackTrace();
- } catch (IOException ex) {
- ex.printStackTrace();
- } finally {
- if (f != null) try { f.close(); } catch (IOException ignored) { }
- }
-
- return new String(buffer);
- }
- }