Advertisement
Guest User

Kickstarter.java

a guest
Sep 1st, 2014
279
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 10.74 KB | None | 0 0
  1. package com.bwfcwalshy.kickstarter;
  2.  
  3. import java.io.File;
  4. import java.io.IOException;
  5. import java.util.List;
  6. import java.util.Map;
  7. import java.util.Map.Entry;
  8. import java.util.UUID;
  9. import java.util.logging.Logger;
  10. import net.milkbowl.vault.economy.Economy;
  11. import org.bukkit.ChatColor;
  12. import org.bukkit.OfflinePlayer;
  13. import org.bukkit.Server;
  14. import org.bukkit.command.Command;
  15. import org.bukkit.command.CommandSender;
  16. import org.bukkit.configuration.file.FileConfiguration;
  17. import org.bukkit.configuration.file.YamlConfiguration;
  18. import org.bukkit.entity.Player;
  19. import org.bukkit.plugin.PluginManager;
  20. import org.bukkit.plugin.RegisteredServiceProvider;
  21. import org.bukkit.plugin.ServicesManager;
  22. import org.bukkit.plugin.java.JavaPlugin;
  23.  
  24. public class Kickstarter
  25.   extends JavaPlugin
  26. {
  27.   private ProjectManager manager;
  28.   public Economy economy;
  29.   private File f;
  30.   private FileConfiguration c;
  31.   private String prefix = "[" + ChatColor.BLUE + "Kickstarter" + ChatColor.WHITE + "] " + ChatColor.RESET;
  32.   private String noPerm = ChatColor.RED + "You don't have permission to perform this command.";
  33.  
  34.   public void onEnable()
  35.   {
  36.     if (getServer().getPluginManager().getPlugin("Vault") != null)
  37.     {
  38.       getLogger().info("Found Vault, hooking...");
  39.       if (setupEconomy())
  40.       {
  41.         getLogger().info("Succesfully hooked to Vault!");
  42.       }
  43.       else
  44.       {
  45.         getLogger().severe("Unable to hook to Vault, disabling plugin...");
  46.         getServer().getPluginManager().disablePlugin(this);
  47.       }
  48.     }
  49.     else
  50.     {
  51.       getLogger().severe("Vault not found, disabling plugin...");
  52.       getServer().getPluginManager().disablePlugin(this);
  53.       return;
  54.     }
  55.     this.f = new File(getDataFolder() + "projects.yml");
  56.     if (!this.f.exists()) {
  57.       try
  58.       {
  59.         this.f.createNewFile();
  60.       }
  61.       catch (IOException e)
  62.       {
  63.         e.printStackTrace();
  64.       }
  65.     }
  66.     this.c = YamlConfiguration.loadConfiguration(this.f);
  67.     this.manager = new ProjectManager(this);
  68.   }
  69.  
  70.   public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)
  71.   {
  72.     if (cmd.getName().equalsIgnoreCase("kickstarter"))
  73.     {
  74.       if (!(sender instanceof Player)) {
  75.         return true;
  76.       }
  77.       Player p = (Player)sender;
  78.       if (args.length == 0)
  79.       {
  80.         p.sendMessage(this.prefix + "Showing all Kickstarter commands:");
  81.         p.sendMessage(ChatColor.BLUE + "/kickstarter - display all the Kickstarter commands");
  82.         p.sendMessage(ChatColor.BLUE + "/kickstarter create <name> <target> - create a project");
  83.         p.sendMessage(ChatColor.BLUE + "/kickstarter end - end your project");
  84.         p.sendMessage(ChatColor.BLUE + "/kickstarter project - show your project");
  85.         p.sendMessage(ChatColor.BLUE + "/kickstarter fund <name> <amount> - fund a project");
  86.         p.sendMessage(ChatColor.BLUE + "/kickstarter browse - display all the projects");
  87.       }
  88.       else if (args.length > 0)
  89.       {
  90.         if (args[0].equalsIgnoreCase("create"))
  91.         {
  92.           if (!p.hasPermission("kickstarter.create"))
  93.           {
  94.             p.sendMessage(this.noPerm);
  95.             return true;
  96.           }
  97.           if (args.length == 3)
  98.           {
  99.             String name = args[1];
  100.             double target = 0.0D;
  101.             try
  102.             {
  103.               target = Double.parseDouble(args[2]);
  104.             }
  105.             catch (NumberFormatException ex)
  106.             {
  107.               p.sendMessage(ChatColor.RED + "Target amount must be a number!");
  108.               return true;
  109.             }
  110.             if (!this.manager.hasProject(p))
  111.             {
  112.               if (this.manager.getProject(name) == null)
  113.               {
  114.                 this.manager.createProject(p, name, target);
  115.                 p.sendMessage(this.prefix + "You have created a Kickstarter project called " + ChatColor.BLUE + name + ChatColor.WHITE + " with a target of " + ChatColor.BLUE + target + ChatColor.WHITE + "!");
  116.               }
  117.               else
  118.               {
  119.                 p.sendMessage(ChatColor.RED + "The project " + ChatColor.DARK_RED + name + ChatColor.RED + " already exists!");
  120.               }
  121.             }
  122.             else {
  123.               p.sendMessage(ChatColor.RED + "You already have a Kickstarter project! If you wish to create a new project, end the current one first by typing " + ChatColor.DARK_RED + " /kickstarter end");
  124.             }
  125.           }
  126.         }
  127.         else if (args[0].equalsIgnoreCase("end"))
  128.         {
  129.           if (!p.hasPermission("kickstarter.end"))
  130.           {
  131.             p.sendMessage(this.noPerm);
  132.             return true;
  133.           }
  134.           if (this.manager.hasProject(p))
  135.           {
  136.             p.sendMessage(this.prefix + "You have ended your Kickstarter project. You collected " + ChatColor.BLUE + this.manager.getCollected(this.manager.getPlayerProject(p)) + ChatColor.WHITE + "$.");
  137.             this.manager.endProject(p);
  138.           }
  139.           else
  140.           {
  141.             p.sendMessage(ChatColor.RED + "You don't have a Kickstarter project!");
  142.           }
  143.         }
  144.         else if (args[0].equalsIgnoreCase("project"))
  145.         {
  146.           if (!p.hasPermission("kickstarter.project"))
  147.           {
  148.             p.sendMessage(this.noPerm);
  149.             return true;
  150.           }
  151.           if (this.manager.hasProject(p))
  152.           {
  153.             Project project = this.manager.getPlayerProject(p);
  154.            
  155.             p.sendMessage(this.prefix + "Showing your project:");
  156.             p.sendMessage(ChatColor.WHITE + "Name: " + ChatColor.BLUE + project.getName());
  157.             p.sendMessage(ChatColor.WHITE + "Target: " + ChatColor.BLUE + project.getTarget());
  158.             p.sendMessage(ChatColor.WHITE + "Collected: " + ChatColor.BLUE + project.getCollected());
  159.            
  160.             double k = project.getTarget() - project.getCollected();
  161.             p.sendMessage(ChatColor.WHITE + "Remaining: " + ChatColor.BLUE + (k <= 0.0D ? "You've reached your target!" : new StringBuilder(String.valueOf(k)).append(ChatColor.WHITE.toString()).append("$.").toString()));
  162.            
  163.             StringBuilder builder = new StringBuilder();
  164.             for (Map.Entry<String, Double> entry : project.getFunders().entrySet()) {
  165.               builder.append(ChatColor.BLUE + (String)entry.getKey() + ChatColor.WHITE + "(" + ChatColor.BLUE + entry.getValue() + ChatColor.WHITE + ")").append(ChatColor.GRAY + ", " + ChatColor.RESET);
  166.             }
  167.             p.sendMessage(ChatColor.WHITE + "Funders: " + ChatColor.BLUE + (builder.toString().isEmpty() ? "You have no funders yet :(" : builder.toString()));
  168.           }
  169.           else
  170.           {
  171.             p.sendMessage(ChatColor.RED + "You don't have a Kickstarter project!");
  172.           }
  173.         }
  174.         else if (args[0].equalsIgnoreCase("fund"))
  175.         {
  176.           if (!p.hasPermission("kickstarter.fund"))
  177.           {
  178.             p.sendMessage(this.noPerm);
  179.             return true;
  180.           }
  181.           if (args.length == 3)
  182.           {
  183.             Project project = this.manager.getProject(args[1]);
  184.             if (project == null)
  185.             {
  186.               p.sendMessage(ChatColor.RED + "Invalid project!");
  187.               return true;
  188.             }
  189.             if (project.getOwner().equals(p.getUniqueId()))
  190.             {
  191.               p.sendMessage(ChatColor.RED + "You can't fund your own project!");
  192.               return true;
  193.             }
  194.             double amount = 0.0D;
  195.             try
  196.             {
  197.               amount = Double.parseDouble(args[2]);
  198.             }
  199.             catch (NumberFormatException ex)
  200.             {
  201.               p.sendMessage(ChatColor.RED + "Amount must be a number!");
  202.               return true;
  203.             }
  204.             double money = this.economy.getBalance(p);
  205.             if (money >= amount)
  206.             {
  207.               this.economy.withdrawPlayer(p, amount);
  208.               this.manager.fundProject(project, p, amount);
  209.              
  210.               p.sendMessage(this.prefix + "You have funded the project " + ChatColor.BLUE + project.getName() + ChatColor.WHITE + " with " + ChatColor.BLUE + amount + ChatColor.WHITE + "$.");
  211.             }
  212.             else
  213.             {
  214.               p.sendMessage(ChatColor.RED + "You don't have enough money to fund this project.");
  215.             }
  216.           }
  217.         }
  218.         else if (args[0].equalsIgnoreCase("browse"))
  219.         {
  220.           if (!p.hasPermission("kickstarter.browse"))
  221.           {
  222.             p.sendMessage(this.noPerm);
  223.             return true;
  224.           }
  225.           if ((args.length == 1) || (args.length == 2))
  226.           {
  227.             int page = 1;
  228.             if (args.length == 2) {
  229.               try
  230.               {
  231.                 page = Integer.parseInt(args[1]);
  232.               }
  233.               catch (NumberFormatException ex)
  234.               {
  235.                 p.sendMessage(ChatColor.RED + "Page must be a number!");
  236.                 return true;
  237.               }
  238.             }
  239.             int all = this.manager.getProjects().size();
  240.             int pages = all % 10;
  241.             if (page > pages)
  242.             {
  243.               p.sendMessage(ChatColor.RED + "Invalid page. Pages: " + ChatColor.DARK_RED + pages);
  244.               return true;
  245.             }
  246.             for (int i = 0; i < 10; i++)
  247.             {
  248.                 int j = (page == 1 ? i : (page * 10 - 10) + i);
  249.               Project project = (Project)this.manager.getProjects().get(j);
  250.               if (project == null) {
  251.                 return true;
  252.               }
  253.               p.sendMessage(ChatColor.BLUE + "" + j + ChatColor.WHITE + ". Name: " + ChatColor.BLUE + project.getName() + ChatColor.WHITE + ", Owner: " + ChatColor.BLUE + toPlayer(project.getOwner()).getName() + ChatColor.WHITE + ", Target: " + ChatColor.BLUE + project.getTarget() + ChatColor.WHITE + ", Collected: " + ChatColor.BLUE + project.getCollected() + ChatColor.WHITE + "$.");
  254.             }
  255.             p.sendMessage(this.prefix + "Page " + ChatColor.BLUE + page + ChatColor.WHITE + "/" + ChatColor.BLUE + pages);
  256.           }
  257.         }
  258.       }
  259.     }
  260.     return false;
  261.   }
  262.  
  263.   private OfflinePlayer toPlayer(UUID id)
  264.   {
  265.     return getServer().getOfflinePlayer(id);
  266.   }
  267.  
  268.   public void save()
  269.   {
  270.     try
  271.     {
  272.       this.c.save(this.f);
  273.     }
  274.     catch (IOException e)
  275.     {
  276.       e.printStackTrace();
  277.     }
  278.   }
  279.  
  280.   public FileConfiguration getConfiguration()
  281.   {
  282.     return this.c;
  283.   }
  284.  
  285.   private boolean setupEconomy()
  286.   {
  287.     RegisteredServiceProvider<Economy> economyProvider = getServer().getServicesManager().getRegistration(Economy.class);
  288.     if (economyProvider != null) {
  289.       this.economy = ((Economy)economyProvider.getProvider());
  290.     }
  291.     return this.economy != null;
  292.   }
  293. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement