· 5 years ago · Mar 17, 2020, 05:26 PM
1package me.MvdgeClicker;
2
3import java.io.BufferedReader;
4import java.io.File;
5import java.io.IOException;
6import java.io.InputStreamReader;
7import java.net.HttpURLConnection;
8import java.net.URL;
9import java.sql.Connection;
10import java.sql.DriverManager;
11import java.sql.PreparedStatement;
12import java.sql.SQLException;
13import java.util.ArrayList;
14import java.util.HashMap;
15import java.util.UUID;
16import java.util.logging.Level;
17import me.MvdgeClicker.Core.CommandExecution;
18import me.MvdgeClicker.Core.GameManager;
19import me.MvdgeClicker.Core.Handlers.ClickEvent;
20import me.MvdgeClicker.Core.Handlers.EventClass;
21import me.MvdgeClicker.Extra.MySQL;
22import me.MvdgeClicker.Extra.PlayerFileSetup;
23import me.MvdgeClicker.Extra.PlayerManager;
24import me.MvdgeClicker.Extra.PullMethods;
25import me.MvdgeClicker.Files.CookielevelFile;
26import me.MvdgeClicker.Files.MessagesFile;
27import me.MvdgeClicker.Files.ShopFile;
28import me.MvdgeClicker.Hooks.MVdWPlaceholders;
29import me.MvdgeClicker.Hooks.Placeholders;
30import net.milkbowl.vault.economy.Economy;
31import org.bukkit.Bukkit;
32import org.bukkit.ChatColor;
33import org.bukkit.command.CommandExecutor;
34import org.bukkit.configuration.file.FileConfiguration;
35import org.bukkit.entity.Player;
36import org.bukkit.event.Listener;
37import org.bukkit.plugin.Plugin;
38import org.bukkit.plugin.RegisteredServiceProvider;
39import org.bukkit.plugin.java.JavaPlugin;
40import org.bukkit.scoreboard.Scoreboard;
41
42public class Main extends JavaPlugin {
43 public Connection connection;
44
45 public String host;
46
47 public String database;
48
49 public String password;
50
51 public String table;
52
53 public String username;
54
55 public int port;
56
57 public int columnCount = 27;
58
59 private String key = "key=98BE0FE67F88AB82B4C197FAF1DC3B69206EFDCC4D3B80FC83A00037510B99B4&resource=";
60
61 private int resourceNumber = 60229;
62
63 public String version = "v3.7.8";
64
65 public static Economy economy = null;
66
67 public MessagesFile mm;
68
69 public ShopFile shopFile;
70
71 public CookielevelFile levelFile;
72
73 public HashMap<UUID, PlayerManager> playerManager = new HashMap<>();
74
75 public ArrayList<UUID> toggleBoard = new ArrayList<>();
76
77 public HashMap<Player, Integer> afkTimer = new HashMap<>();
78
79 public boolean fromCmd;
80
81 public Scoreboard board;
82
83 public void onEnable() {
84 getServer().getPluginManager().registerEvents((Listener)new EventClass(), (Plugin)this);
85 getServer().getPluginManager().registerEvents((Listener)new ClickEvent(), (Plugin)this);
86 getCommand("cookie").setExecutor((CommandExecutor)new CommandExecution());
87 if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) {
88 getLogger().log(Level.INFO, "Hooked into PlaceholderAPI successfully.");
89 Placeholders ph = new Placeholders(this);
90 ph.registerHook();
91 }
92 if (Bukkit.getPluginManager().isPluginEnabled("MVdWPlaceholderAPI")) {
93 MVdWPlaceholders ph = new MVdWPlaceholders();
94 ph.registerPlaceholders();
95 }
96 configManager();
97 versionManager();
98 if (!economySetup()) {
99 getLogger().log(Level.WARNING, "Some features may be disabled due to the Vault Soft Dependency not being found!");
100 } else {
101 getLogger().log(Level.INFO, "Hooked into Vault successfully");
102 }
103 if (getConfig().getBoolean("SQL.enabled"))
104 mySQLSetup();
105 (new GameManager()).runnable();
106 for (Player player : Bukkit.getOnlinePlayers()) {
107 UUID uuid = player.getUniqueId();
108 if (!getConfig().getBoolean("SQL.enabled")) {
109 (new PlayerFileSetup()).addToManager(uuid);
110 continue;
111 }
112 (new MySQL()).loadDataFromTable(uuid, player);
113 }
114 }
115
116 public void onDisable() {
117 for (UUID uuid : this.playerManager.keySet()) {
118 if (!getConfig().getBoolean("SQL.enabled")) {
119 (new PlayerFileSetup()).saveToFile(uuid);
120 } else {
121 (new MySQL()).saveDataToTable(uuid, Bukkit.getPlayer(uuid));
122 }
123 if (this.toggleBoard.contains(uuid)) {
124 Player player = Bukkit.getPlayer(uuid);
125 player.setScoreboard(Bukkit.getScoreboardManager().getNewScoreboard());
126 }
127 }
128 }
129
130 private boolean economySetup() {
131 if (getServer().getPluginManager().getPlugin("Vault") == null)
132 return false;
133 RegisteredServiceProvider<Economy> ecoRSP = getServer().getServicesManager().getRegistration(Economy.class);
134 if (ecoRSP == null)
135 return false;
136 economy = (Economy)ecoRSP.getProvider();
137 return (economy != null);
138 }
139
140 private void versionManager() {
141 if (!getConfig().getBoolean("Settings.versionChecker"))
142 return;
143 try {
144 HttpURLConnection connection = (HttpURLConnection)(new URL("https://api.spigotmc.org/legacy/update.php?resource=" + this.resourceNumber)).openConnection();
145 connection.setDoOutput(true);
146 connection.setRequestMethod("POST");
147 connection.getOutputStream().write((String.valueOf(String.valueOf(this.key)) + this.resourceNumber).getBytes("UTF-8"));
148 String versionCheck = (new BufferedReader(new InputStreamReader(connection.getInputStream()))).readLine();
149 versionCheck = versionCheck.split(" ")[0];
150 if (!versionCheck.equalsIgnoreCase(this.version))
151 for (Player player : Bukkit.getOnlinePlayers()) {
152 if (player.isOp() || player.hasPermission("mudgeclicker.versionchecker"))
153 (new PullMethods()).sendMessage(player, "warn", ChatColor.translateAlternateColorCodes('&', "&7&oThere is an update available for &cMudge Clicker&7&o! Newest version: &c" + versionCheck));
154 }
155 } catch (IOException e) {
156 getServer().getConsoleSender().sendMessage(ChatColor.RED + "[MudgeClicker] Connection to Spigot API Failed!");
157 e.printStackTrace();
158 }
159 }
160
161 private void configManager() {
162 try {
163 if (!getDataFolder().exists())
164 getDataFolder().mkdirs();
165 File file = new File(getDataFolder(), "config.yml");
166 if (!file.exists()) {
167 getConfig().options().copyDefaults(true);
168 getConfig().options().copyHeader(true);
169 saveDefaultConfig();
170 }
171 } catch (Exception ie) {
172 ie.printStackTrace();
173 getServer().getConsoleSender().sendMessage(ChatColor.RED + "[MudgeClicker] >> An error has occured while creating the config.");
174 }
175 messageManager();
176 shopManager();
177 cookielevelManager();
178 this.mm.update();
179 }
180
181 public void mySQLSetup() {
182 this.host = getConfig().getString("SQL.host");
183 this.port = getConfig().getInt("SQL.port");
184 this.table = getConfig().getString("SQL.table");
185 this.database = getConfig().getString("SQL.database");
186 this.password = getConfig().getString("SQL.password");
187 this.username = getConfig().getString("SQL.username");
188 try {
189 synchronized (this) {
190 if (this.connection != null && !this.connection.isClosed())
191 return;
192 Class.forName("com.mysql.jdbc.Driver");
193 this.connection = DriverManager.getConnection("jdbc:mysql://" + this.host + ":" + this.port + "/" + this.database, this.username, this.password);
194 }
195 } catch (SQLException|ClassNotFoundException e) {
196 e.printStackTrace();
197 }
198 createTable();
199 }
200
201 public void createTable() {
202 try {
203 PreparedStatement create = this.connection.prepareStatement("CREATE TABLE IF NOT EXISTS " + this.table + " (UUID VARCHAR(100), Name VARCHAR(100), Cookies BIGINT, TotalCPS BIGINT, TotalCPC BIGINT, ItemCooldown INT, GoldCookiesFound INT, TimesClicked INT, TimePlayed INT, MoneyMade DOUBLE," +
204 " ContractsOwned1 INT, ContractsOwned2 INT, ContractsOwned3 INT, ContractsOwned4 INT, ContractsOwned5 INT, ContractsOwned6 INT, ContractsOwned7 INT, ContractsOwned8 INT, ContractsOwned9 INT, ContractsOwned10 INT, ExplosiveOwned BOOLEAN, GoldHunterOwned BOOLEAN," +
205 " MoneyClicksOwned BOOLEAN, CriticalHitsOwned BOOLEAN, EnhancedProductionOwned BOOLEAN, ActiveSkill INT, CookieLevel INT)");
206 create.executeUpdate();
207 } catch (SQLException e) {
208 e.printStackTrace();
209 }
210 if ((new File(getDataFolder(), "PlayerData")).exists() && (new File(getDataFolder(), "PlayerData")).listFiles() != null) {
211 byte b;
212 int i;
213 File[] arrayOfFile;
214 for (i = (arrayOfFile = (new File(getDataFolder(), "PlayerData")).listFiles()).length, b = 0; b < i; ) {
215 File playerFile = arrayOfFile[b];
216 (new MySQL()).createPlayerFromFile(playerFile);
217 b = (byte)(b + 1);
218 }
219 }
220 }
221
222 private void messageManager() {
223 MessagesFile mf = new MessagesFile();
224 mf.setup();
225 this.mm = mf;
226 }
227
228 private void shopManager() {
229 ShopFile fileShop = new ShopFile();
230 fileShop.setupFile();
231 this.shopFile = fileShop;
232 }
233
234 private void cookielevelManager() {
235 CookielevelFile fileLevel = new CookielevelFile();
236 fileLevel.setupFile();
237 this.levelFile = fileLevel;
238 }
239
240 public FileConfiguration GetShopFile() {
241 return this.shopFile.shopFileConfig;
242 }
243
244 public FileConfiguration getCookielevelFile() {
245 return this.levelFile.levelFileConfig;
246 }
247
248 public String messageConfig(String paramString) {
249 return ChatColor.translateAlternateColorCodes('&', this.mm.fc.getString(paramString));
250 }
251
252 public ArrayList<String> messageConfigArray(String paramString) {
253 return (ArrayList<String>)this.mm.fc.getStringList(paramString);
254 }
255}