· 9 years ago · Nov 27, 2016, 08:42 PM
1package net.krainaprzygody.data;
2
3import java.io.File;
4import java.io.IOException;
5import java.sql.ResultSet;
6import java.sql.SQLException;
7import java.util.Arrays;
8import java.util.List;
9import java.util.UUID;
10
11import org.bukkit.Bukkit;
12import org.bukkit.ChatColor;
13import org.bukkit.configuration.file.FileConfiguration;
14import org.bukkit.configuration.file.YamlConfiguration;
15
16import net.krainaprzygody.Main;
17import net.krainaprzygody.objects.Guild;
18import net.krainaprzygody.objects.User;
19import net.krainaprzygody.objects.utils.GuildUtils;
20import net.krainaprzygody.objects.utils.UserUtils;
21import pl.kamilkime.kmyslq.KMySQL;
22
23public class DataManager {
24
25 private static FileConfiguration fc = Main.getInst().getConfig();
26
27 private static void sendConsole(String msg){
28 Bukkit.getConsoleSender().sendMessage("§c[SVGuilds] " + ChatColor.translateAlternateColorCodes('&', msg));
29 }
30
31 public static void load(){
32 if(fc.getBoolean("sql") !=true){
33 loadUsers();
34 loadGuilds();
35 checkObjects();
36 }
37 try{
38 loadUsersFromMySQL();
39 loadGuildsFromMySQL();
40 checkObjects();
41 } catch(SQLException e){
42 e.printStackTrace();
43 }
44 }
45
46 public static void save(){
47 if(fc.getBoolean("sql") !=true){
48 saveToFiles();
49 }
50 try{
51 saveToSql();
52 } catch(SQLException e){
53 e.printStackTrace();
54 }
55 }
56
57 public static void saveToFiles(){
58 checkObjects();
59 saveUsers();
60 saveGuilds();
61 }
62
63 public static void saveToSql() throws SQLException{
64 checkObjects();
65 saveUsersToMySQL();
66 saveGuildsToMySQL();
67 }
68
69 public static void checkObjects(){
70 int removed = 0;
71 for(Guild g : GuildUtils.getGuilds()){
72 if(g.getName() == null || g.getTag() == null || g.getLeader() == null || g.getMoney() < 0){
73 GuildUtils.removeGuild(g);
74 removed++;
75 }
76 }
77 for(User u : UserUtils.getUsers()){
78 if(u.getName() == null || u.getUuid() == null || u.getKills() < 0 || u.getDeaths() < 0){
79 UserUtils.removeUser(u);
80 removed++;
81 }
82 }
83 sendConsole("&a" + removed + " &cinvalid objects removed!");
84 }
85
86 private static String join(List<String> list) {
87 String r = "";
88 for(String s : list) {
89 r += "@" + s;
90 }
91 return r.replaceFirst("@", "");
92 }
93
94 private static List<String> split(String s) {
95 return Arrays.asList(s.split("@"));
96 }
97
98 private static void checkTables() throws SQLException{
99 if(!KMySQL.isConnected()) KMySQL.openConnection();
100 KMySQL.getConnection().prepareStatement(
101 "CREATE TABLE IF NOT EXISTS `srv_users` ("
102 + "uuid varchar(36) PRIMARY KEY not null, "
103 + "name varchar(32) not null, "
104 + "power int not null, "
105 + "kills int not null, "
106 + "deaths int not null, "
107 + "guild varchar(16)"
108 + ");").executeUpdate();
109 KMySQL.getConnection().prepareStatement(
110 "CREATE TABLE IF NOT EXISTS `srv_guilds` ("
111 + "tag varchar(16) PRIMARY KEY not null, "
112 + "name varchar(256) not null, "
113 + "power int not null, "
114 + "money int not null, "
115 + "leader varchar(32) not null, "
116 + "members text not null, "
117 + "invited text not null, "
118 + "mods text not null, "
119 + "allies text not null, "
120 + "enemies text not null, "
121 + "allyinvs text not null, "
122 + "neutralinvs text not null, "
123 + "regions text,"
124 + "base text"
125 + ");").executeUpdate();
126 KMySQL.closeConnection();
127 }
128
129 private static void loadUsers(){
130 int loaded = 0;
131 for(File f : FileManager.getUsers().listFiles()){
132 YamlConfiguration yml = YamlConfiguration.loadConfiguration(f);
133 User u = User.get(UUID.fromString(yml.getString("uuid")));
134 u.setName(yml.getString("name"));
135 u.setPower(yml.getInt("power"));
136 u.setKills(yml.getInt("kills"));
137 u.setDeaths(yml.getInt("deaths"));
138 if(yml.getString("guild") !=null) u.setGuild(Guild.get(yml.getString("guild")));
139 loaded++;
140 }
141 sendConsole("&a" + loaded + " &cusers loaded!");
142 }
143
144 private static void loadUsersFromMySQL() throws SQLException{
145 checkTables();
146 int loaded = 0;
147 if(!KMySQL.isConnected()) KMySQL.openConnection();
148 ResultSet rs = KMySQL.getConnection().prepareStatement("SELECT * FROM `srv_users`").executeQuery();
149 while(rs.next()){
150 User u = User.get(UUID.fromString(rs.getString("uuid")));
151 u.setName(rs.getString("name"));
152 u.setPower(rs.getInt("power"));
153 u.setKills(rs.getInt("kills"));
154 u.setDeaths(rs.getInt("deaths"));
155 if(rs.getString("guild") !=null) u.setGuild(Guild.get(rs.getString("guild")));
156 loaded++;
157 }
158 KMySQL.closeConnection();
159 sendConsole("&a" + loaded + " &cusers grom MySQL loaded!");
160 }
161
162 private static void loadGuilds(){
163 int loaded = 0;
164 for(File f : FileManager.getGuilds().listFiles()){
165 YamlConfiguration yml = YamlConfiguration.loadConfiguration(f);
166 Guild g = Guild.get(yml.getString("tag"));
167 g.setName(yml.getString("name"));
168 g.setPower(yml.getInt("power"));
169 g.setMoney(yml.getInt("money"));
170 g.setLeader(User.get(UUID.fromString(yml.getString("leader"))));
171 g.setMembers(UserUtils.fromNames(yml.getStringList("members")));
172 g.setInvited(UserUtils.fromNames(yml.getStringList("invited")));
173 g.setMods(UserUtils.fromNames(yml.getStringList("mods")));
174 g.setAllies(GuildUtils.fromTags(yml.getStringList("allies")));
175 g.setEnemies(GuildUtils.fromTags(yml.getStringList("enemies")));
176 g.setAllyinvs(GuildUtils.fromTags(yml.getStringList("allyinvs")));
177 g.setNeutralinvs(GuildUtils.fromTags(yml.getStringList("neutralinvs")));
178 if(yml.get("regions") !=null) g.setRegions(GuildUtils.toChunks(yml.getStringList("regions")));
179 if(yml.get("base") !=null) g.setBase(GuildUtils.fromString(yml.getString("base")));
180 loaded++;
181 }
182 sendConsole("&a" + loaded + " &cguilds loaded!");
183 }
184
185 private static void loadGuildsFromMySQL() throws SQLException{
186 checkTables();
187 int loaded = 0;
188 if(!KMySQL.isConnected()) KMySQL.openConnection();
189 ResultSet rs = KMySQL.getConnection().prepareStatement("SELECT * FROM `srv_guilds`").executeQuery();
190 while(rs.next()){
191 Guild g = Guild.get(rs.getString("tag"));
192 g.setName(rs.getString("name"));
193 g.setPower(rs.getInt("power"));
194 g.setMoney(rs.getInt("money"));
195 g.setLeader(User.get(UUID.fromString(rs.getString("leader"))));
196 g.setMembers(UserUtils.fromNames(split(rs.getString("members"))));
197 g.setInvited(UserUtils.fromNames(split(rs.getString("invited"))));
198 g.setMods(UserUtils.fromNames(split(rs.getString("mods"))));
199 g.setAllies(GuildUtils.fromTags(split(rs.getString("allies"))));
200 g.setEnemies(GuildUtils.fromTags(split(rs.getString("enemies"))));
201 g.setAllyinvs(GuildUtils.fromTags(split(rs.getString("allyinvs"))));
202 g.setNeutralinvs(GuildUtils.fromTags(split(rs.getString("neutralinvs"))));
203 if(rs.getString("regions") !=null) g.setRegions(GuildUtils.toChunks(split(rs.getString("regions"))));
204 if(rs.getString("base") !=null) g.setBase(GuildUtils.fromString(rs.getString("base")));
205 loaded++;
206 }
207 KMySQL.closeConnection();
208 sendConsole("&a" + loaded + " &cguilds from MySQL loaded!");
209 }
210
211 private static void saveUsers(){
212 int saved = 0;
213 for(User u : UserUtils.getUsers()){
214 File f = new File(FileManager.getUsers(), u.getName() + ".yml");
215 if(!f.exists()){
216 try {
217 f.createNewFile();
218 } catch (IOException e) {
219 e.printStackTrace();
220 }
221 }
222 YamlConfiguration yml = YamlConfiguration.loadConfiguration(f);
223 yml.set("name", u.getName());
224 yml.set("uuid", u.getUuid().toString());
225 yml.set("power", u.getPower());
226 yml.set("kills", u.getKills());
227 yml.set("deaths", u.getDeaths());
228 yml.set("guild", (u.getGuild() !=null ? u.getGuild().getTag() : null));
229 try {
230 yml.save(f);
231 } catch (IOException e) {
232 e.printStackTrace();
233 }
234 saved++;
235 }
236 sendConsole("&a" + saved + " &cusers saved!");
237 }
238
239 private static void saveUsersToMySQL() throws SQLException{
240 checkTables();
241 int saved = 0;
242 if(!KMySQL.isConnected()) KMySQL.openConnection();
243 for(User u : UserUtils.getUsers()){
244 KMySQL.getConnection().prepareStatement("INSERT INTO `srv_users` "
245 + "(name, uuid, power, kills, deaths, guild) VALUES ("
246 + "'" + u.getName() + "', "
247 + "'" + u.getUuid().toString() + "', "
248 + "'" + u.getPower() + "', "
249 + "'" + u.getKills() + "', "
250 + "'" + u.getDeaths() + "', "
251 + "'" + (u.getGuild() !=null ? u.getGuild().getTag() : null) + "'"
252 + ") ON DUPLICATE KEY UPDATE "
253 + "name='" + u.getName() + "', "
254 + "uuid='" + u.getUuid().toString() + "', "
255 + "power='" + u.getPower() + "', "
256 + "kills='" + u.getKills() + "', "
257 + "deaths='" + u.getDeaths() + "', "
258 + "guild='" + (u.getGuild() !=null ? u.getGuild().getTag() : null) + "';"
259 ).executeUpdate();
260 saved++;
261 }
262 KMySQL.closeConnection();
263 sendConsole("&a" + saved + " &cusers to MySQL saved!");
264 }
265
266 private static void saveGuilds(){
267 int saved = 0;
268 for(Guild g : GuildUtils.getGuilds()){
269 File f = new File(FileManager.getGuilds(), g.getTag() + ".yml");
270 if(!f.exists()){
271 try {
272 f.createNewFile();
273 } catch (IOException e) {
274 e.printStackTrace();
275 }
276 }
277 YamlConfiguration yml = YamlConfiguration.loadConfiguration(f);
278 yml.set("name", g.getName());
279 yml.set("tag", g.getTag());
280 yml.set("power", g.getPower());
281 yml.set("money", g.getMoney());
282 yml.set("leader", g.getLeader().getUuid().toString());
283 yml.set("members", UserUtils.toNames(g.getMembers()));
284 yml.set("invited", UserUtils.toNames(g.getInvited()));
285 yml.set("mods", UserUtils.toNames(g.getMods()));
286 yml.set("allies", GuildUtils.toTags(g.getAllies()));
287 yml.set("enemies", GuildUtils.toTags(g.getEnemies()));
288 yml.set("allyinvs", GuildUtils.toTags(g.getAllyInvs()));
289 yml.set("neutralinvs", GuildUtils.toTags(g.getNeutralInvs()));
290 yml.set("regions", (g.getRegions() !=null ? GuildUtils.fromChunks(g.getRegions()) : null));
291 yml.set("base", (g.getBase() !=null ? GuildUtils.fromLocation(g.getBase()) : null));
292 try {
293 yml.save(f);
294 } catch (IOException e) {
295 e.printStackTrace();
296 }
297 saved++;
298 }
299 sendConsole("&a" + saved + " &cguilds saved!");
300 }
301
302 private static void saveGuildsToMySQL() throws SQLException{
303 checkTables();
304 int saved = 0;
305 if(!KMySQL.isConnected()) KMySQL.openConnection();
306 for(Guild g : GuildUtils.getGuilds()){
307 KMySQL.getConnection().prepareStatement("INSERT INTO `srv_guilds` "
308 + "(tag, name, power, money, leader, members, invited, mods, allies, enemies, allyinvs, neutralinvs, regions, base) VALUES ("
309 + "'" + g.getTag() + "', "
310 + "'" + g.getName() + "', "
311 + "'" + g.getPower() + "', "
312 + "'" + g.getMoney() + "', "
313 + "'" + g.getLeader().getUuid().toString() + "', "
314 + "'" + join(UserUtils.toNames(g.getMembers())) + "', "
315 + "'" + join(UserUtils.toNames(g.getInvited())) + "', "
316 + "'" + join(UserUtils.toNames(g.getMods())) + "', "
317 + "'" + join(GuildUtils.toTags(g.getAllies())) + "', "
318 + "'" + join(GuildUtils.toTags(g.getEnemies())) + "', "
319 + "'" + join(GuildUtils.toTags(g.getAllyInvs())) + "', "
320 + "'" + join(GuildUtils.toTags(g.getNeutralInvs())) + "', "
321 + "'" + (g.getRegions() !=null ? join(GuildUtils.fromChunks(g.getRegions())) : null) + "', "
322 + "'" + (g.getBase() !=null ? GuildUtils.fromLocation(g.getBase()) : null) + "'"
323 + ") ON DUPLICATE KEY UPDATE "
324 + "tag='" + g.getTag() + "', "
325 + "name='" + g.getName() + "', "
326 + "power='" + g.getPower() + "', "
327 + "money='" + g.getMoney() + "', "
328 + "leader='" + g.getLeader().getUuid().toString() + "', "
329 + "members='" + join(UserUtils.toNames(g.getMembers())) + "', "
330 + "invited='" + join(UserUtils.toNames(g.getInvited())) + "', "
331 + "mods='" + join(UserUtils.toNames(g.getMods())) + "', "
332 + "allies='" + join(GuildUtils.toTags(g.getAllies())) + "', "
333 + "enemies='" + join(GuildUtils.toTags(g.getEnemies())) + "', "
334 + "allyinvs='" + join(GuildUtils.toTags(g.getAllyInvs())) + "', "
335 + "neutralinvs='" + join(GuildUtils.toTags(g.getNeutralInvs())) + "', "
336 + "regions='" + (g.getRegions() !=null ? join(GuildUtils.fromChunks(g.getRegions())) : null) + "', "
337 + "base='" + (g.getBase() !=null ? GuildUtils.fromLocation(g.getBase()) : null) + "';"
338 ).executeUpdate();
339 saved++;
340 }
341 KMySQL.closeConnection();
342 sendConsole("&a" + saved + " &cguilds to MySQL saved!");
343 }
344}