hassansyyid

Untitled

Aug 4th, 2015
316
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 13.77 KB | None | 0 0
  1. package io.github.hsyyid.adminshop;
  2.  
  3. import io.github.hsyyid.adminshop.cmdexecutors.SetItemShopExecutor;
  4. import io.github.hsyyid.adminshop.utils.AdminShop;
  5. import io.github.hsyyid.adminshop.utils.LocationAdapter;
  6. import io.github.hsyyid.adminshop.utils.ShopItem;
  7.  
  8. import java.io.BufferedReader;
  9. import java.io.BufferedWriter;
  10. import java.io.File;
  11. import java.io.FileNotFoundException;
  12. import java.io.FileReader;
  13. import java.io.FileWriter;
  14. import java.io.IOException;
  15. import java.math.BigDecimal;
  16. import java.util.ArrayList;
  17.  
  18. import ninja.leaping.configurate.ConfigurationNode;
  19. import ninja.leaping.configurate.commented.CommentedConfigurationNode;
  20. import ninja.leaping.configurate.loader.ConfigurationLoader;
  21.  
  22. import org.slf4j.Logger;
  23. import org.spongepowered.api.Game;
  24. import org.spongepowered.api.block.BlockTypes;
  25. import org.spongepowered.api.block.tileentity.Sign;
  26. import org.spongepowered.api.data.manipulator.tileentity.SignData;
  27. import org.spongepowered.api.entity.player.Player;
  28. import org.spongepowered.api.event.Subscribe;
  29. import org.spongepowered.api.event.block.tileentity.SignChangeEvent;
  30. import org.spongepowered.api.event.entity.player.PlayerBreakBlockEvent;
  31. import org.spongepowered.api.event.entity.player.PlayerInteractBlockEvent;
  32. import org.spongepowered.api.event.state.ServerStartedEvent;
  33. import org.spongepowered.api.event.state.ServerStoppedEvent;
  34. import org.spongepowered.api.event.state.ServerStoppingEvent;
  35. import org.spongepowered.api.plugin.Plugin;
  36. import org.spongepowered.api.service.config.DefaultConfig;
  37. import org.spongepowered.api.text.Texts;
  38. import org.spongepowered.api.text.format.TextColors;
  39. import org.spongepowered.api.util.command.args.GenericArguments;
  40. import org.spongepowered.api.util.command.spec.CommandSpec;
  41. import org.spongepowered.api.world.Location;
  42. import org.spongepowered.api.world.TeleportHelper;
  43.  
  44. import com.erigitic.config.AccountManager;
  45. import com.erigitic.main.TotalEconomy;
  46. import com.google.gson.Gson;
  47. import com.google.gson.GsonBuilder;
  48. import com.google.inject.Inject;
  49.  
  50. @Plugin(id = "AdminShop", name = "AdminShop", version = "0.1", dependencies = "required-after:TotalEconomy")
  51. public class Main
  52. {
  53.     public static Game game = null;
  54.     public static ConfigurationNode config = null;
  55.     public static ConfigurationLoader<CommentedConfigurationNode> configurationManager;
  56.     public static TeleportHelper helper;
  57.     public static ArrayList<AdminShop> adminShops = new ArrayList<AdminShop>();
  58.     public static ArrayList<AdminShop> buyAdminShops = new ArrayList<AdminShop>();
  59.     public static ArrayList<ShopItem> items = new ArrayList<ShopItem>();
  60.     private Gson gson = new GsonBuilder().setPrettyPrinting().registerTypeHierarchyAdapter(Location.class, new LocationAdapter()).create();
  61.  
  62.     @Inject
  63.     private Logger logger;
  64.  
  65.     public Logger getLogger()
  66.     {
  67.         return logger;
  68.     }
  69.  
  70.     @Inject
  71.     @DefaultConfig(sharedRoot = true)
  72.     private File dConfig;
  73.  
  74.     @Inject
  75.     @DefaultConfig(sharedRoot = true)
  76.     private ConfigurationLoader<CommentedConfigurationNode> confManager;
  77.  
  78.     @Subscribe
  79.     public void onServerStart(ServerStartedEvent event)
  80.     {
  81.         getLogger().info("AdminShop loading...");
  82.  
  83. //      JsonReader r = new JsonReader(new File('./'));
  84. //      adminShops = gson.fromJson(json, AdminShop[].class);
  85.  
  86.         game = event.getGame();
  87.         helper = game.getTeleportHelper();
  88.  
  89.         // Config File
  90.         try
  91.         {
  92.             if (!dConfig.exists())
  93.             {
  94.                 dConfig.createNewFile();
  95.                 config = confManager.load();
  96.                 confManager.save(config);
  97.             }
  98.             configurationManager = confManager;
  99.             config = confManager.load();
  100.  
  101.         }
  102.         catch (IOException exception)
  103.         {
  104.             getLogger().error("The default configuration could not be loaded or created!");
  105.         }
  106.  
  107.         CommandSpec setItemShopCommandSpec = CommandSpec.builder()
  108.             .description(Texts.of("Sets Item for a AdminShop"))
  109.             .permission("adminshop.setitem")
  110.             .arguments(GenericArguments.onlyOne(GenericArguments.string(Texts.of("item ID"))))
  111.             .executor(new SetItemShopExecutor())
  112.             .build();
  113.  
  114.         game.getCommandDispatcher().register(this, setItemShopCommandSpec, "setitem");
  115.  
  116.         getLogger().info("-----------------------------");
  117.         getLogger().info("AdminShop was made by HassanS6000!");
  118.         getLogger().info("Please post all errors on the Sponge Thread or on GitHub!");
  119.         getLogger().info("Have fun, and enjoy! :D");
  120.         getLogger().info("-----------------------------");
  121.         getLogger().info("AdminShop loaded!");
  122.     }
  123.  
  124.     @Subscribe
  125.     public void onServerStopping(ServerStoppingEvent event)
  126.     {
  127.         String json = gson.toJson(adminShops);
  128.         String j = gson.toJson(buyAdminShops);
  129.         try
  130.         {
  131.             // Assume default encoding.
  132.             FileWriter fileWriter = new FileWriter("AdminShops.json");
  133.  
  134.             // Always wrap FileWriter in BufferedWriter.
  135.             BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
  136.  
  137.             bufferedWriter.write(json);
  138.  
  139.             // Always close files.
  140.             bufferedWriter.close();
  141.         }
  142.         catch (IOException ex)
  143.         {
  144.             getLogger().error("Could not save JSON file!");
  145.         }
  146.  
  147.         try
  148.         {
  149.             // Assume default encoding.
  150.             FileWriter fileWriter = new FileWriter("BuyAdminShops.json");
  151.  
  152.             // Always wrap FileWriter in BufferedWriter.
  153.             BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
  154.  
  155.             bufferedWriter.write(j);
  156.  
  157.             // Always close files.
  158.             bufferedWriter.close();
  159.         }
  160.         catch (IOException ex)
  161.         {
  162.             getLogger().error("Could not save JSON file!");
  163.         }
  164.     }
  165.  
  166.     @Subscribe
  167.     public void onSignChange(SignChangeEvent event)
  168.     {
  169.         Player player = null;
  170.         if (event.getCause().isPresent() && event.getCause().get().getCause() instanceof Player)
  171.         {
  172.             player = (Player) event.getCause().get().getCause();
  173.         }
  174.  
  175.         Sign sign = event.getTile();
  176.         Location signLocation = sign.getBlock();
  177.         SignData signData = event.getNewData();
  178.         String line0 = Texts.toPlain(signData.getLine(0));
  179.         String line1 = Texts.toPlain(signData.getLine(1));
  180.         String line2 = Texts.toPlain(signData.getLine(2));
  181.         String line3 = Texts.toPlain(signData.getLine(3));
  182.  
  183.         if (line0.equals("[AdminShop]"))
  184.         {
  185.             if (player != null && player.hasPermission("adminshop.create"))
  186.             {
  187.                 int itemAmount = Integer.parseInt(line1);
  188.                 double price = Double.parseDouble(line2);
  189.                 String itemName = line3;
  190.                 AdminShop shop = new AdminShop(itemAmount, price, itemName, signLocation);
  191.                 adminShops.add(shop);
  192.                 signData.setLine(0, Texts.of(TextColors.DARK_BLUE, "[AdminShop]"));
  193.                 player.sendMessage(Texts.of(TextColors.DARK_RED, "[AdminShop]: ", TextColors.GOLD, "Successfully created AdminShop!"));
  194.             }
  195.             else if (player != null)
  196.             {
  197.                 player.sendMessage(Texts.of(TextColors.DARK_RED, "[AdminShop]: ", TextColors.DARK_RED, "Error! ", TextColors.RED, "You do not have permission to create an AdminShop!"));
  198.             }
  199.         }
  200.         else if (line0.equals("[AdminShopSell]"))
  201.         {
  202.             if (player != null && player.hasPermission("adminshop.create"))
  203.             {
  204.                 int itemAmount = Integer.parseInt(line1);
  205.                 double price = Double.parseDouble(line2);
  206.                 String itemName = line3;
  207.                 AdminShop shop = new AdminShop(itemAmount, price, itemName, signLocation);
  208.                 buyAdminShops.add(shop);
  209.                 signData.setLine(0, Texts.of(TextColors.DARK_BLUE, "[AdminShopSell]"));
  210.                 player.sendMessage(Texts.of(TextColors.DARK_RED, "[AdminShop]: ", TextColors.GOLD, "Successfully created AdminShop!"));
  211.             }
  212.             else if (player != null)
  213.             {
  214.                 player.sendMessage(Texts.of(TextColors.DARK_RED, "[AdminShop]: ", TextColors.DARK_RED, "Error! ", TextColors.RED, "You do not have permission to create an AdminShop!"));
  215.             }
  216.         }
  217.  
  218.         event.setNewData(signData);
  219.     }
  220.  
  221.     @Subscribe
  222.     public void onPlayerBreakBlock(PlayerBreakBlockEvent event)
  223.     {
  224.         if (event.getBlock().getBlock() != null && (event.getBlock().getBlock().getType() == BlockTypes.WALL_SIGN || event.getBlock().getBlock().getType() == BlockTypes.STANDING_SIGN))
  225.         {
  226.             AdminShop thisShop = null;
  227.             for (AdminShop shop : adminShops)
  228.             {
  229.                 if (shop.getSignLocation().getX() == event.getBlock().getX() && shop.getSignLocation().getY() == event.getBlock().getY() && shop.getSignLocation().getZ() == event.getBlock().getZ())
  230.                 {
  231.                     thisShop = shop;
  232.                 }
  233.             }
  234.  
  235.             if (thisShop != null && event.getEntity().hasPermission("adminshop.remove"))
  236.             {
  237.                 event.getEntity().sendMessage(Texts.of(TextColors.DARK_RED, "[AdminShop]:", TextColors.GREEN, " AdminShop successfully removed!"));
  238.                 adminShops.remove(thisShop);
  239.             }
  240.             else if (thisShop != null)
  241.             {
  242.                 event.getEntity().sendMessage(Texts.of(TextColors.DARK_RED, "[AdminShop]: Error!", TextColors.RED, " you do not have permission to destroy AdminShops!"));
  243.                 event.setCancelled(true);
  244.             }
  245.             else
  246.             {
  247.                 AdminShop thisBuyShop = null;
  248.                 for (AdminShop shop : buyAdminShops)
  249.                 {
  250.                     if (shop.getSignLocation().getX() == event.getBlock().getX() && shop.getSignLocation().getY() == event.getBlock().getY() && shop.getSignLocation().getZ() == event.getBlock().getZ())
  251.                     {
  252.                         thisBuyShop = shop;
  253.                     }
  254.                 }
  255.  
  256.                 if (thisBuyShop != null && event.getEntity().hasPermission("adminshop.remove"))
  257.                 {
  258.                     event.getEntity().sendMessage(Texts.of(TextColors.DARK_RED, "[AdminShop]:", TextColors.GREEN, " AdminShop successfully removed!"));
  259.                     buyAdminShops.remove(thisBuyShop);
  260.                 }
  261.                 else if (thisBuyShop != null)
  262.                 {
  263.                     event.getEntity().sendMessage(Texts.of(TextColors.DARK_RED, "[AdminShop]: Error!", TextColors.RED, " you do not have permission to destroy AdminShops!"));
  264.                     event.setCancelled(true);
  265.                 }
  266.             }
  267.         }
  268.     }
  269.  
  270.     @Subscribe
  271.     public void onPlayerInteractBlock(PlayerInteractBlockEvent event)
  272.     {
  273.         if (event.getBlock().getBlock() != null && (event.getBlock().getBlock().getType() == BlockTypes.WALL_SIGN || event.getBlock().getBlock().getType() == BlockTypes.STANDING_SIGN))
  274.         {
  275.             AdminShop thisShop = null;
  276.             for (AdminShop chestShop : adminShops)
  277.             {
  278.                 if (chestShop.getSignLocation().getX() == event.getBlock().getX() && chestShop.getSignLocation().getY() == event.getBlock().getY() && chestShop.getSignLocation().getZ() == event.getBlock().getZ())
  279.                 {
  280.                     thisShop = chestShop;
  281.                 }
  282.             }
  283.  
  284.             if (thisShop != null)
  285.             {
  286.                 ShopItem item = null;
  287.                 for (ShopItem i : items)
  288.                 {
  289.                     if (i.getPlayer().getUniqueId() == event.getEntity().getUniqueId())
  290.                     {
  291.                         item = i;
  292.                         break;
  293.                     }
  294.                 }
  295.  
  296.                 if (item != null)
  297.                 {
  298.                     adminShops.remove(thisShop);
  299.                     thisShop.setItemName(item.getItemID());
  300.                     adminShops.add(thisShop);
  301.                     items.remove(item);
  302.                     event.getEntity().sendMessage(Texts.of(TextColors.DARK_RED, "[AdminShop]: ", TextColors.GREEN, "Successfully set new item ID."));
  303.                 }
  304.                 else
  305.                 {
  306.                     int itemAmount = thisShop.getItemAmount();
  307.                     double price = thisShop.getPrice();
  308.                     String itemName = thisShop.getItemName();
  309.  
  310.                     Player player = event.getEntity();
  311.                     TotalEconomy totalEconomy = (TotalEconomy) game.getPluginManager().getPlugin("TotalEconomy").get().getInstance();
  312.                     AccountManager accountManager = totalEconomy.getAccountManager();
  313.                     BigDecimal amount = new BigDecimal(price);
  314.  
  315.                     if (accountManager.getBalance(player).intValue() > amount.intValue())
  316.                     {
  317.                         accountManager.removeFromBalance(player, amount);
  318.                         player.sendMessage(Texts.of(TextColors.DARK_RED, "[AdminShop]: ", TextColors.GOLD, "You have just bought " + itemAmount + " " + itemName + " for " + price + " dollars."));
  319.                         game.getCommandDispatcher().process(game.getServer().getConsole(), "give" + " " + player.getName() + " " + itemName + " " + itemAmount);
  320.                     }
  321.                     else
  322.                     {
  323.                         player.sendMessage(Texts.of(TextColors.DARK_RED, "[AdminShop]: ", TextColors.DARK_RED, "Error! ", TextColors.RED, "You don't have enough money to do that!"));
  324.                     }
  325.                 }
  326.             }
  327.             else
  328.             {
  329.                 AdminShop thisBuyShop = null;
  330.                 for (AdminShop chestShop : buyAdminShops)
  331.                 {
  332.                     if (chestShop.getSignLocation().getX() == event.getBlock().getX() && chestShop.getSignLocation().getY() == event.getBlock().getY() && chestShop.getSignLocation().getZ() == event.getBlock().getZ())
  333.                     {
  334.                         thisBuyShop = chestShop;
  335.                     }
  336.                 }
  337.  
  338.                 if (thisBuyShop != null)
  339.                 {
  340.                     ShopItem item = null;
  341.                     for (ShopItem i : items)
  342.                     {
  343.                         if (i.getPlayer().getUniqueId() == event.getEntity().getUniqueId())
  344.                         {
  345.                             item = i;
  346.                             break;
  347.                         }
  348.                     }
  349.  
  350.                     if (item != null)
  351.                     {
  352.                         buyAdminShops.remove(thisBuyShop);
  353.                         thisBuyShop.setItemName(item.getItemID());
  354.                         buyAdminShops.add(thisBuyShop);
  355.                         items.remove(item);
  356.                         event.getEntity().sendMessage(Texts.of(TextColors.DARK_RED, "[AdminShop]: ", TextColors.GREEN, "Successfully set new item ID."));
  357.                     }
  358.                     else
  359.                     {
  360.                         int itemAmount = thisBuyShop.getItemAmount();
  361.                         double price = thisBuyShop.getPrice();
  362.                         String itemName = thisBuyShop.getItemName();
  363.  
  364.                         Player player = event.getEntity();
  365.                         TotalEconomy totalEconomy = (TotalEconomy) game.getPluginManager().getPlugin("TotalEconomy").get().getInstance();
  366.                         AccountManager accountManager = totalEconomy.getAccountManager();
  367.                         BigDecimal amount = new BigDecimal(price);
  368.  
  369.                         if (player.getItemInHand().isPresent() && player.getItemInHand().get().getItem().getName().equals(itemName) && player.getItemInHand().get().getQuantity() == itemAmount)
  370.                         {
  371.                             player.setItemInHand(null);
  372.                             accountManager.addToBalance(player, amount, true);
  373.                             player.sendMessage(Texts.of(TextColors.DARK_RED, "[AdminShop]: ", TextColors.GOLD, "You have just sold " + itemAmount + " " + itemName + " for " + price + " dollars."));
  374.                         }
  375.                         else
  376.                         {
  377.                             player.sendMessage(Texts.of(TextColors.DARK_RED, "[AdminShop]: ", TextColors.DARK_RED, "Error! ", TextColors.RED, "You're not holding this item or the right quantity of this item!"));
  378.                         }
  379.                     }
  380.                 }
  381.             }
  382.         }
  383.     }
  384.  
  385.     public static ConfigurationLoader<CommentedConfigurationNode> getConfigManager()
  386.     {
  387.         return configurationManager;
  388.     }
  389. }
Advertisement
Add Comment
Please, Sign In to add comment