ATM.java 12 KB

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