ATM.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349
  1. package de.Linus122.TimeIsMoney;
  2. import java.io.File;
  3. import java.io.IOException;
  4. import java.util.List;
  5. import org.bukkit.Bukkit;
  6. import org.bukkit.Material;
  7. import org.bukkit.OfflinePlayer;
  8. import org.bukkit.block.Block;
  9. import org.bukkit.block.Sign;
  10. import org.bukkit.command.Command;
  11. import org.bukkit.command.CommandExecutor;
  12. import org.bukkit.command.CommandSender;
  13. import org.bukkit.configuration.file.YamlConfiguration;
  14. import org.bukkit.entity.Player;
  15. import org.bukkit.event.Event.Result;
  16. import org.bukkit.event.EventHandler;
  17. import org.bukkit.event.EventPriority;
  18. import org.bukkit.event.Listener;
  19. import org.bukkit.event.block.SignChangeEvent;
  20. import org.bukkit.event.inventory.InventoryClickEvent;
  21. import org.bukkit.event.inventory.InventoryDragEvent;
  22. import org.bukkit.event.inventory.InventoryMoveItemEvent;
  23. import org.bukkit.event.player.PlayerInteractEvent;
  24. import org.bukkit.inventory.Inventory;
  25. import org.bukkit.inventory.ItemStack;
  26. import org.bukkit.inventory.meta.ItemMeta;
  27. import org.bukkit.plugin.Plugin;
  28. import com.google.common.primitives.Doubles;
  29. import static de.Linus122.TimeIsMoney.tools.Utils.CC;
  30. public class ATM implements Listener, CommandExecutor {
  31. private final Plugin pl;
  32. private static YamlConfiguration cfg;
  33. private static final File fileBankAccounts = new File("plugins/TimeIsMoney/data.dat");
  34. private double[] worths = new double[4];
  35. public ATM(Main pl){
  36. this.pl = pl;
  37. pl.getServer().getPluginManager().registerEvents(this, pl);
  38. pl.getCommand("atm").setExecutor(this);
  39. if(!fileBankAccounts.exists()){
  40. try {
  41. fileBankAccounts.createNewFile();
  42. } catch (IOException e) {
  43. e.printStackTrace();
  44. }
  45. }
  46. cfg = YamlConfiguration.loadConfiguration(fileBankAccounts);
  47. worths = Doubles.toArray(Main.finalconfig.getDoubleList("atm_worth_gradation"));
  48. }
  49. private static void withdrawBank(Player p, double amount){
  50. String bankString = getBankString(p);
  51. if(!cfg.contains(bankString)) cfg.set(bankString, 0.0);
  52. cfg.set(bankString, getBankBalance(p) - amount);
  53. saveBanks();
  54. }
  55. public static void depositBank(Player p, double amount){
  56. String bankString = getBankString(p);
  57. if(!cfg.contains(bankString)) cfg.set(bankString, 0.0);
  58. cfg.set(bankString, getBankBalance(p) + amount);
  59. saveBanks();
  60. }
  61. private static boolean bankHas(Player p, double amount){
  62. String bankString = getBankString(p);
  63. if(!cfg.contains(bankString)) cfg.set(bankString, 0.0);
  64. return getBankBalance(p) >= amount;
  65. }
  66. //Doesn't support groups
  67. private static double getBankBalance(OfflinePlayer p){
  68. String bankString = p.getName() + "_TimBANK";
  69. if(!cfg.contains(bankString)) cfg.set(bankString, 0.0);
  70. return cfg.getDouble(bankString);
  71. }
  72. private static double getBankBalance(Player p){
  73. String bankString = getBankString(p);
  74. if(!cfg.contains(bankString)) cfg.set(bankString, 0.0);
  75. return cfg.getDouble(bankString);
  76. }
  77. private static void saveBanks(){
  78. try {
  79. cfg.save(fileBankAccounts);
  80. } catch (IOException e) {
  81. e.printStackTrace();
  82. }
  83. }
  84. //Converts old tim bank
  85. private static void convertOldBank(Player p){
  86. String bankString = getBankString(p);
  87. if(Main.economy.hasAccount(bankString)){
  88. if(Main.economy.getBalance(bankString) > 0){
  89. p.sendMessage(CC("&aSuccessfully converted your old TIM-Bank to new version!"));
  90. depositBank(p, Main.economy.getBalance(bankString));
  91. Main.economy.withdrawPlayer(bankString, Main.economy.getBalance(bankString));
  92. }
  93. }
  94. }
  95. private static String getBankString(Player p){
  96. if(!Main.finalconfig.getBoolean("group-atms")){
  97. return p.getName() + "_TimBANK";
  98. }else{
  99. for(String key : Main.finalconfig.getConfigurationSection("atm_groups").getKeys(false)){
  100. List<String> list = Main.finalconfig.getStringList("atm_groups." + key);
  101. if(list.contains(p.getWorld().getName())){
  102. return p.getName() + "_TimBANK_" + key;
  103. }
  104. }
  105. }
  106. return p.getName() + "_TimBANK";
  107. /*if(!Main.finalconfig.getBoolean("group-atms")){
  108. return p.getName() + "_TimBANK";
  109. }else{
  110. for(String key : Main.finalconfig.getConfigurationSection("atm_groups").getKeys(false)){
  111. List<String> list = Main.finalconfig.getStringList("atm_groups." + key);
  112. if(list.contains(p.getWorld().getName())){
  113. return p.getName() + "_TimBANK_" + key;
  114. }
  115. }
  116. }
  117. return p.getName() + "_TimBANK";*/
  118. }
  119. @EventHandler(priority = EventPriority.HIGHEST)
  120. public void onInteract(PlayerInteractEvent e){
  121. if(e.getClickedBlock() != null){
  122. if(e.getClickedBlock().getType() == Material.WALL_SIGN || e.getClickedBlock().getType() == Material.SIGN || e.getClickedBlock().getType() == Material.SIGN_POST){
  123. Sign sign = (Sign) e.getClickedBlock().getState();
  124. if(sign.getLine(0).equalsIgnoreCase(CC("&cATM"))){
  125. if(!e.getPlayer().hasPermission("tim.atm.use")){
  126. e.getPlayer().sendMessage(CC(Main.finalconfig.getString("message_atm_noperms")));
  127. }else{
  128. this.openGUI(e.getPlayer());
  129. }
  130. }
  131. }
  132. }
  133. }
  134. @EventHandler
  135. public void onMove(InventoryMoveItemEvent e){
  136. if(e.getSource() == null) return;
  137. if(e.getSource().getTitle() == null) return;
  138. if(e.getSource().getTitle().equals(CC(Main.finalconfig.getString("atm_title")))) {
  139. e.setCancelled(true);
  140. }
  141. }
  142. @SuppressWarnings("deprecation")
  143. @EventHandler
  144. public void onClick(InventoryClickEvent e){
  145. try{
  146. if(e == null) return;
  147. if(e.getInventory() == null) return;
  148. if(e.getInventory().getTitle() == null) return;
  149. if(e.getInventory().getTitle().equals(CC(Main.finalconfig.getString("atm_title")))){
  150. e.setResult(Result.DENY);
  151. Player p = (Player) e.getWhoClicked();
  152. //e.setCancelled(true);
  153. if(e.getCurrentItem() != null){
  154. // left side
  155. if(e.getSlot() < 4){
  156. double amount = worths[3 - e.getSlot()];
  157. if(ATM.bankHas(p, amount)){
  158. ATM.withdrawBank(p, amount);
  159. Main.economy.depositPlayer(p, amount);
  160. e.getWhoClicked().sendMessage(CC(Main.finalconfig.getString("atm_withdraw")) + " " + Main.economy.format(amount));
  161. }else{
  162. e.getWhoClicked().sendMessage(CC(Main.finalconfig.getString("message_atm_nomoneyinbank")));
  163. }
  164. }else
  165. // right side
  166. if(e.getSlot() > 4){
  167. double amount = worths[3 - (3 - (e.getSlot() - 5))];
  168. if(Main.economy.has((Player) e.getWhoClicked(), amount)){
  169. ATM.depositBank(p, amount);
  170. Main.economy.withdrawPlayer((Player) e.getWhoClicked(), amount);
  171. e.getWhoClicked().sendMessage(CC(Main.finalconfig.getString("atm_deposit")) + " " + Main.economy.format(amount));
  172. }else{
  173. e.getWhoClicked().sendMessage(CC(Main.finalconfig.getString("message_atm_nomoney")));
  174. }
  175. }
  176. ItemStack is = new ItemStack(Material.GOLD_NUGGET, 1);
  177. ItemMeta im = is.getItemMeta();
  178. im.setDisplayName(CC(Main.finalconfig.getString("atm_balance")) + " " + Main.economy.format(ATM.getBankBalance(p)));
  179. is.setItemMeta(im);
  180. e.getInventory().setItem(4, is);
  181. }
  182. }
  183. }catch(Exception ignored){
  184. }
  185. }
  186. private void openGUI(Player player) {
  187. convertOldBank(player);
  188. Inventory atm_gui = Bukkit.createInventory(null, 9, CC(Main.finalconfig.getString("atm_title")));
  189. //
  190. ItemStack is = new ItemStack(Material.GOLD_NUGGET, 1);
  191. ItemMeta im = is.getItemMeta();
  192. im.setDisplayName(CC(Main.finalconfig.getString("atm_balance")) + " " + Main.economy.format(ATM.getBankBalance(player)));
  193. is.setItemMeta(im);
  194. atm_gui.setItem(4, is);
  195. //
  196. is = new ItemStack(Material.CLAY_BRICK, 1);
  197. im = is.getItemMeta();
  198. im.setDisplayName(CC(Main.finalconfig.getString("atm_withdraw") + " &a") + Main.economy.format(worths[0]));
  199. is.setItemMeta(im);
  200. atm_gui.setItem(3, is);
  201. //
  202. is = new ItemStack(Material.IRON_INGOT, 1);
  203. im = is.getItemMeta();
  204. im.setDisplayName(CC(Main.finalconfig.getString("atm_withdraw") + " &a") + Main.economy.format(worths[1]));
  205. is.setItemMeta(im);
  206. atm_gui.setItem(2, is);
  207. //
  208. is = new ItemStack(Material.GOLD_INGOT, 1);
  209. im = is.getItemMeta();
  210. im.setDisplayName(CC(Main.finalconfig.getString("atm_withdraw") + " &a") + Main.economy.format(worths[2]));
  211. is.setItemMeta(im);
  212. atm_gui.setItem(1, is);
  213. //
  214. is = new ItemStack(Material.DIAMOND, 1);
  215. im = is.getItemMeta();
  216. im.setDisplayName(CC(Main.finalconfig.getString("atm_withdraw") + " &a") + Main.economy.format(worths[3]));
  217. is.setItemMeta(im);
  218. atm_gui.setItem(0, is);
  219. //DEPOSITE
  220. //
  221. is = new ItemStack(Material.CLAY_BRICK, 1);
  222. im = is.getItemMeta();
  223. im.setDisplayName(CC(Main.finalconfig.getString("atm_deposit") + " &4") + Main.economy.format(worths[0]));
  224. is.setItemMeta(im);
  225. atm_gui.setItem(5, is);
  226. //
  227. is = new ItemStack(Material.IRON_INGOT, 1);
  228. im = is.getItemMeta();
  229. im.setDisplayName(CC(Main.finalconfig.getString("atm_deposit") + " &4") + Main.economy.format(worths[1]));
  230. is.setItemMeta(im);
  231. atm_gui.setItem(6, is);
  232. //
  233. is = new ItemStack(Material.GOLD_INGOT, 1);
  234. im = is.getItemMeta();
  235. im.setDisplayName(CC(Main.finalconfig.getString("atm_deposit") + " &4" )+ Main.economy.format(worths[2]));
  236. is.setItemMeta(im);
  237. atm_gui.setItem(7, is);
  238. //
  239. is = new ItemStack(Material.DIAMOND, 1);
  240. im = is.getItemMeta();
  241. im.setDisplayName(CC(Main.finalconfig.getString("atm_deposit") + " &4") + Main.economy.format(worths[3]));
  242. is.setItemMeta(im);
  243. atm_gui.setItem(8, is);
  244. player.openInventory(atm_gui);
  245. }
  246. public static void changeMoney(Player p, double amount){
  247. }
  248. @EventHandler
  249. public void onItem2(InventoryDragEvent e){
  250. if(e == null) return;
  251. if(e.getInventory() == null) return;
  252. if(e.getInventory().getTitle() == null) return;
  253. if(e.getInventory().getTitle().equals(CC(Main.finalconfig.getString("atm_title")))){
  254. e.setResult(Result.DENY);
  255. }
  256. }
  257. @EventHandler
  258. public void onSign(final SignChangeEvent e){
  259. final Block b = e.getBlock();
  260. if(b.getType() == Material.WALL_SIGN || b.getType() == Material.SIGN || b.getType() == Material.SIGN_POST){
  261. pl.getServer().getScheduler().scheduleSyncDelayedTask(pl, () -> {
  262. if(b.getType() == Material.WALL_SIGN || b.getType() == Material.SIGN || b.getType() == Material.SIGN_POST){
  263. Sign sign = (Sign) e.getBlock().getState();
  264. if(sign.getLine(0).equalsIgnoreCase("[atm]")){
  265. if(!e.getPlayer().hasPermission("tim.atm.place")){
  266. e.getPlayer().sendMessage(CC("&cYou dont have permissions to build ATM's!"));
  267. sign.setLine(0, "");
  268. }else{
  269. sign.setLine(0, CC("&cATM"));
  270. sign.update();
  271. e.getPlayer().sendMessage(CC("&2ATM created! (You can also write something in the Lines 2-4)"));
  272. }
  273. }
  274. }
  275. }, 10L);
  276. }
  277. }
  278. @Override
  279. public boolean onCommand(CommandSender cs, Command arg1, String arg2, String[] args) {
  280. if(args.length == 0){
  281. if(cs.hasPermission("tim.use")){
  282. openGUI((Player) cs);
  283. return true;
  284. }
  285. }
  286. if(cs.hasPermission("tim.admin")){
  287. if(args.length > 0){
  288. switch(args[0]){
  289. case "balance":
  290. if(args.length > 1){
  291. cs.sendMessage(CC("&2ATM-Balance of&c " + args[1] + "&2: &c") + getBankBalance(Bukkit.getOfflinePlayer(args[1])));
  292. }else{
  293. cs.sendMessage("/atm balance <player>");
  294. }
  295. break;
  296. default:
  297. @SuppressWarnings("deprecation")
  298. OfflinePlayer op = Bukkit.getOfflinePlayer(args[0]);
  299. if(op == null){
  300. cs.sendMessage("Player is offline");
  301. return true;
  302. }
  303. if(op.isOnline()){
  304. openGUI(op.getPlayer());
  305. cs.sendMessage("opened!");
  306. }
  307. break;
  308. }
  309. }else{
  310. cs.sendMessage(CC("&c/atm <player> &a- opens atm for player"));
  311. cs.sendMessage(CC("&c/atm balance <player> &a- gets balance of player"));
  312. return true;
  313. }
  314. }
  315. return true;
  316. }
  317. }