· 7 years ago · Feb 04, 2019, 09:18 PM
1package com.madworks.dexystexpansion;
2
3import net.md_5.bungee.api.ChatMessageType;
4import net.md_5.bungee.api.chat.TextComponent;
5import org.bukkit.Bukkit;
6import org.bukkit.ChatColor;
7import org.bukkit.Color;
8import org.bukkit.attribute.Attribute;
9import org.bukkit.configuration.ConfigurationSection;
10import org.bukkit.entity.Player;
11
12import java.sql.*;
13import java.util.Set;
14import java.util.logging.Level;
15
16public class ConnectionDataBase {
17 DexystExpansion plugin ;//= DexystExpansion.getPlugin(DexystExpansion.class);
18 PlayerClass playerClass;
19
20
21 public ConnectionDataBase(DexystExpansion pl){
22 plugin = pl;
23
24
25 }
26
27
28 public void setDatabase(){
29 Connection con = null;
30 Statement stmt = null;
31 String columnNameCF ="";
32
33
34
35
36 try{
37 con = plugin.hikari.getConnection();
38 DatabaseMetaData dbm = con.getMetaData();
39 ResultSet tables = dbm.getTables(null, null, "Players", null);
40 int c =0;
41 int columncount=0;
42 int clc = 0;
43 Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN+"Setup Database Started !");
44 if (tables.next()) {
45 Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN+"DataBase Tabale Exist!");
46
47
48 String quer="SELECT * FROM Players";
49
50 Statement st=con.createStatement();
51 ResultSet rs=st.executeQuery(quer);
52 ResultSetMetaData meta = rs.getMetaData();
53 columncount = meta.getColumnCount();
54 clc = ( columncount -1 )/2 ;
55
56 ConfigurationSection dbColumns = plugin.getConfig().getConfigurationSection("DB");
57 Set<String> dbColumnsKeys = dbColumns.getKeys(false);
58
59
60 //add columns to the db , to have the same number of classes in the db and config
61 Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN+"Check coloumns");
62 for (int n =clc+1; dbColumnsKeys.size() >= n ;n++){ //cf 6 db 4->5
63 Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN+"Coloumns need to be added");
64
65 int i =0;
66 for (String cl : dbColumnsKeys) {
67 i++;
68 ConfigurationSection currentCFColumn = dbColumns.getConfigurationSection(cl);
69 columnNameCF = currentCFColumn.getString("classname");
70 Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN+"name checking :"+columnNameCF+" -n: "+n);
71 if (i == n){
72 PreparedStatement psts =con.prepareStatement("alter table Players ADD COLUMN IF NOT EXISTS souls_"+columnNameCF+" INT DEFAULT 0");
73 PreparedStatement pstc =con.prepareStatement("alter table Players ADD COLUMN IF NOT EXISTS level_"+columnNameCF+" INT DEFAULT 1");
74 psts.executeUpdate();
75 pstc.executeUpdate();
76 Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN+"Columns added to DB : souls_"+columnNameCF +" and level_"+columnNameCF);
77 }
78
79 }
80
81 //add souls and level column
82
83 }
84
85
86
87
88 st=con.createStatement();
89 rs=st.executeQuery(quer);
90 meta = rs.getMetaData();
91 columncount = meta.getColumnCount();
92 clc = ( columncount -1 )/2 ;
93
94 //check and change the name of the columns
95 Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN+"Check coloumns Names");
96 int count = 2 ; // start counting from 1 always
97 int countCF = 2;
98
99 String[] columnNamesDB = new String[columncount];
100
101 for (String cl : dbColumnsKeys){
102
103 ConfigurationSection currentCFColumn = dbColumns.getConfigurationSection(cl);
104 Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN+"Column "+count +" checking");
105
106 columnNameCF = currentCFColumn.getString("classname");
107 columnNamesDB [count-2] = meta.getColumnLabel(count); //0 -2 / 1- 3 / 2-4
108 String sCF = "souls_"+columnNameCF;
109 String lCF = "level_"+columnNameCF;
110
111
112 Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN + "Column db : " + columnNamesDB[count - 2] + " column cf : "+sCF);
113 if (!sCF.equals(columnNamesDB[count-2])) {
114 PreparedStatement rn = con.prepareStatement("ALTER TABLE Players CHANGE COLUMN " + columnNamesDB[count - 2] + " " + sCF + " INT ");
115 rn.executeUpdate();
116 Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN + "Columns renamed from : " + columnNamesDB[count - 2] + " to "+sCF);
117 }
118
119 count++;
120 columnNamesDB[count - 2] = meta.getColumnLabel(count);
121 Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN + "Column db : " + columnNamesDB[count - 2] + " column cf : "+lCF);
122 if (!lCF.equals(columnNamesDB[count-2])) {
123
124
125 PreparedStatement rn = con.prepareStatement("ALTER TABLE Players CHANGE COLUMN " + columnNamesDB[count - 2] + " " + lCF+ " INT ");
126 rn.executeUpdate();
127 Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN + "Columns renamed from : " + columnNamesDB[count - 2] + " to "+lCF);
128
129 }
130 count++;
131
132 }
133 Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN+"Columns Names Checked");
134
135
136 // Table exists
137 }
138 else {
139
140 // Table does not exist
141
142 stmt = con.createStatement();
143 String sql = "CREATE TABLE Players " +
144 "(UUID VARCHAR(255) not NULL, " +
145 " souls_class1 INT not NULL DEFAULT '0', " +
146 " level_class1 INT not NULL DEFAULT '1', " +
147 " souls_class2 INT not NULL DEFAULT '0', " +
148 " level_class2 INT not NULL DEFAULT '1', " +
149 " souls_class3 INT not NULL DEFAULT '0', " +
150 " level_class3 INT not NULL DEFAULT '1', " +
151 " PRIMARY KEY ( UUID ))";
152
153 stmt.executeUpdate(sql);
154 Bukkit.getConsoleSender().sendMessage("Database Created ! ...");
155 setDatabase();
156 }
157
158 Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN+"SetUP Completed");
159
160
161
162 }catch (Exception e){
163 Bukkit.getConsoleSender().sendMessage(ChatColor.RED+"Error Setup : "+e);
164 }
165
166
167 }
168
169
170 public String createQuery(){
171 String classname = "";
172 String query = "UUID";
173
174
175 ConfigurationSection dbColumns = plugin.getConfig().getConfigurationSection("DB");
176 Set<String> dbColumnsKeys = dbColumns.getKeys(false);
177
178 for (String cl : dbColumnsKeys) {
179
180 ConfigurationSection currentCFColumn = dbColumns.getConfigurationSection(cl);
181 classname = currentCFColumn.getString("classname");
182 query = query +", souls_"+classname+", level_"+classname;
183
184 }
185
186
187 return query;
188 }
189
190 public String createQueryValue(){
191 String classname = "";
192 String value = "";
193 int i=0;
194
195 ConfigurationSection dbColumns = plugin.getConfig().getConfigurationSection("DB");
196 Set<String> dbColumnsKeys = dbColumns.getKeys(false);
197
198 for (String cl : dbColumnsKeys) {
199
200 ConfigurationSection currentCFColumn = dbColumns.getConfigurationSection(cl);
201 classname = currentCFColumn.getString("classname");
202 value = value+"0,1,";
203 }
204 value = value.substring(0,value.length()-1);
205
206 return value;
207 }
208
209
210
211 //region MethodsDB
212 //
213 public void checkUser(Player _player){
214 boolean playerexist = false;
215 Connection con = null;
216
217 try {
218 con = plugin.hikari.getConnection();
219 //_player.sendMessage("Connection is closed : "+con.isClosed());
220
221 PreparedStatement st = con.prepareStatement("select * from Players where UUID = ?");
222 st.setString(1, _player.getUniqueId().toString());
223 ResultSet r1 = st.executeQuery();
224 if (r1.next()) {
225 loadData(_player);
226 } else {
227 newUser(_player.getUniqueId().toString());
228 _player.sendMessage("New Player Created");
229 }
230 st.close();
231
232
233
234 }catch (SQLException e){
235 Bukkit.getConsoleSender().sendMessage(ChatColor.RED+"MySQL ERROR 3 : "+e);
236
237 }
238 finally {
239 if (con != null){
240 try{
241 con.close();
242 }catch (Exception e){
243 Bukkit.getConsoleSender().sendMessage(ChatColor.RED+"MySQL ERROR 24 : "+e); }
244 }
245 }
246
247
248
249
250 }
251
252 public void newUser(String _uuid){
253 Connection con = null;
254 String query = createQuery();
255 String queryvalue = createQueryValue();
256 try {
257
258 con = plugin.hikari.getConnection();
259
260 PreparedStatement preparedStmt = con.prepareStatement("INSERT INTO Players ("+query+") VALUES (?,"+queryvalue+")");
261 preparedStmt.setString(1, _uuid);
262 preparedStmt.execute();
263 Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN+"Nuovo Player Creato ");
264 preparedStmt.close();
265
266
267
268
269 }
270
271 catch (Exception e)
272 {
273 Bukkit.getConsoleSender().sendMessage(ChatColor.RED+"MySQL ERROR 4 : "+e);
274
275
276 }
277 finally {
278 if (con != null){
279 try{
280 con.close();
281 }catch (Exception e){
282 Bukkit.getConsoleSender().sendMessage(ChatColor.RED+"MySQL ERROR 23 : "+e); }
283 }
284 }
285 }
286
287
288 public void loadData(Player _player){
289 Connection con = null;
290 String UUID = "";
291 String classname ="";
292 int i=0;
293 int[] soulsclass ;
294 int[] levelsclass ;
295 String[] nameclasses;
296
297 PlayerClass playerClass = new PlayerClass(plugin,this);
298 ConfigurationSection dbColumns = plugin.getConfig().getConfigurationSection("DB");
299 Set<String> dbColumnsKeys = dbColumns.getKeys(false);
300 soulsclass = new int[dbColumnsKeys.size()];
301 levelsclass = new int[dbColumnsKeys.size()];
302 nameclasses = new String[dbColumnsKeys.size()];
303
304
305 try {
306 con = plugin.hikari.getConnection();
307 //_player.sendMessage("Connection is closed : "+con.isClosed());
308
309 PreparedStatement preparedStmt = con.prepareStatement("SELECT * from Players WHERE UUID = ?");
310 preparedStmt.setString(1 , _player.getUniqueId().toString());
311 ResultSet myRs = preparedStmt.executeQuery();
312 while (myRs.next()){
313
314
315 for (String cl : dbColumnsKeys) {
316
317 ConfigurationSection currentCFColumn = dbColumns.getConfigurationSection(cl);
318 classname = currentCFColumn.getString("classname");
319 nameclasses[i] = classname;
320 soulsclass[i] = myRs.getInt("souls_"+classname);
321 levelsclass[i] = myRs.getInt("level_"+classname);
322 i++;
323
324 }
325
326
327
328 //UUID = myRs.getString("UUID");
329 /*
330 Souls_Wizzard = myRs.getInt("Souls_Wizzard");
331 Souls_MasterofElements = myRs.getInt("Souls_MasterofElements");
332 Souls_Warrior = myRs.getInt("Souls_Warrior");
333 Class_Wizzard = myRs.getInt("Class_Wizzard");
334 Class_MasterofElements = myRs.getInt("Class_MasterofElements");
335 Class_Warrior = myRs.getInt("Class_Warrior");
336 */
337 }
338 preparedStmt.close();
339
340
341 }
342 catch (Exception e){
343 Bukkit.getConsoleSender().sendMessage(ChatColor.RED+"ERROR 5 : "+e);
344
345
346 }
347 finally {
348 if (con != null){
349 try{
350 con.close();
351 }catch (Exception e){
352 Bukkit.getConsoleSender().sendMessage(ChatColor.RED+"MySQL ERROR 22 : "+e); }
353 }
354 }
355
356 _player.sendMessage(ChatColor.AQUA+"This are your current stats : ");
357
358 for (int z=0;z < i ;z++){
359 _player.sendMessage("Souls "+nameclasses[z]+" : "+soulsclass[z]);
360 _player.sendMessage("Level "+nameclasses[z]+" : "+levelsclass[z]);
361 }
362 /*
363 _player.sendMessage("Souls Wizzard : "+Souls_Wizzard);
364 _player.sendMessage("Souls Master of Elements : "+Souls_MasterofElements);
365 _player.sendMessage("Souls Warrior : "+Souls_Warrior);
366 _player.sendMessage("Class Wizzard : "+Class_Wizzard);
367 _player.sendMessage("Class Master of Elements : "+Class_MasterofElements);
368 _player.sendMessage("Class Warrior : "+Class_Warrior);
369
370
371 playerClass.UUID_Player = UUID;
372 playerClass.Souls = Souls;
373 playerClass.Level = Level;
374 playerClass.Class = Class;
375 */
376
377 }
378
379
380 public int LoadSouls(Player _player){
381 Connection con = null;
382 int Souls = 0;
383 String activeClass ="";
384
385 try {
386 con = plugin.hikari.getConnection();
387 //_player.sendMessage("Connection is closed : "+con.isClosed());
388
389 activeClass= playerClass.getCurrentClass(_player);
390 PreparedStatement preparedStmt = con.prepareStatement("SELECT souls_"+activeClass+" from Players WHERE UUID = ?");
391 preparedStmt.setString(1, _player.getUniqueId().toString());
392 ResultSet myRs = preparedStmt.executeQuery();
393 while (myRs.next()) {
394
395 Souls = myRs.getInt("souls_"+activeClass);
396 }
397 preparedStmt.close();
398
399
400
401
402 }
403 catch (Exception e){
404 Bukkit.getConsoleSender().sendMessage(ChatColor.RED+"ERROR 6 : "+e);
405
406
407 }
408 finally {
409 if (con != null){
410 try{
411 con.close();
412 }catch (Exception e){
413 Bukkit.getConsoleSender().sendMessage(ChatColor.RED+"MySQL ERROR 21 : "+e); }
414 }
415 }
416
417 return Souls;
418 }
419
420 public int LoadSoulsClass(Player _player,String classname){
421 Connection con = null;
422 int Souls = 0;
423
424
425 try {
426 con = plugin.hikari.getConnection();
427 //_player.sendMessage("Connection is closed : "+con.isClosed());
428 PreparedStatement preparedStmt = con.prepareStatement("SELECT souls_"+classname+" from Players WHERE UUID = ?");
429 preparedStmt.setString(1, _player.getUniqueId().toString());
430 ResultSet myRs = preparedStmt.executeQuery();
431 while (myRs.next()) {
432
433 Souls = myRs.getInt("souls_"+classname);
434 }
435 preparedStmt.close();
436
437
438
439
440 }
441 catch (Exception e){
442 Bukkit.getConsoleSender().sendMessage(ChatColor.RED+"ERROR 6 : "+e);
443
444
445 }
446 finally {
447 if (con != null){
448 try{
449 con.close();
450 }catch (Exception e){
451 Bukkit.getConsoleSender().sendMessage(ChatColor.RED+"MySQL ERROR 21 : "+e); }
452 }
453 }
454
455 return Souls;
456 }
457
458 public int LoadLevel(Player _player){
459 Connection con = null;
460 int LevelClass = 1;
461 String activeClass ="";
462
463 try {
464 con = plugin.hikari.getConnection();
465 //_player.sendMessage("Connection is closed : "+con.isClosed());
466 activeClass= playerClass.getCurrentClass(_player);
467 PreparedStatement preparedStmt = con.prepareStatement("SELECT level_"+activeClass+" from Players WHERE UUID = ?");
468 preparedStmt.setString(1, _player.getUniqueId().toString());
469 ResultSet myRs = preparedStmt.executeQuery();
470 while (myRs.next()) {
471
472 LevelClass = myRs.getInt("level_"+activeClass);
473 }
474 preparedStmt.close();
475
476
477
478 }
479 catch (Exception e){
480 Bukkit.getConsoleSender().sendMessage(ChatColor.RED+"ERROR 6 : "+e);
481
482
483 }
484 finally {
485 if (con != null){
486 try{
487 con.close();
488 }catch (Exception e){
489 Bukkit.getConsoleSender().sendMessage(ChatColor.RED+"MySQL ERROR 20 : "+e); }
490 }
491 }
492 return LevelClass;
493 }
494
495 public int LoadLevelClass(Player _player,String classname){
496 Connection con = null;
497 int LevelClass = 1;
498
499 try {
500 con = plugin.hikari.getConnection();
501 //_player.sendMessage("Connection is closed : "+con.isClosed());
502 PreparedStatement preparedStmt = con.prepareStatement("SELECT level_"+classname+" from Players WHERE UUID = ?");
503 preparedStmt.setString(1, _player.getUniqueId().toString());
504 ResultSet myRs = preparedStmt.executeQuery();
505 while (myRs.next()) {
506
507 LevelClass = myRs.getInt("level_"+classname);
508 }
509 preparedStmt.close();
510
511
512
513 }
514 catch (Exception e){
515 Bukkit.getConsoleSender().sendMessage(ChatColor.RED+"ERROR 21 : "+e);
516
517
518 }
519 finally {
520 if (con != null){
521 try{
522 con.close();
523 }catch (Exception e){
524 Bukkit.getConsoleSender().sendMessage(ChatColor.RED+"MySQL ERROR 22 : "+e); }
525 }
526 }
527 return LevelClass;
528 }
529
530
531
532 public void addSouls(int Increment,Player _player){
533 Connection con = null;
534 String activeClass ="";
535 activeClass= playerClass.getCurrentClass(_player);
536 //_player.sendMessage("class : "+activeClass);
537
538 try {
539 con = plugin.hikari.getConnection();
540 //_player.sendMessage("Connection is closed : "+con.isClosed());
541 PreparedStatement preparedStmt = con.prepareStatement("UPDATE Players SET souls_"+activeClass+" = souls_"+activeClass+" + ? where UUID= ? ");
542 preparedStmt.setInt(1, Increment);
543 preparedStmt.setString(2, _player.getUniqueId().toString());
544 int i = preparedStmt.executeUpdate();
545 if (i > 0) {
546 //Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN+"Incremento +"+Increment+" done");
547 // _player.sendMessage(ChatColor.AQUA+"Earned +"+Increment+" done");
548 } else {
549 Bukkit.getConsoleSender().sendMessage(ChatColor.RED+"ERROR 7");
550 }
551 preparedStmt.close();
552
553
554
555 }
556 catch (Exception e)
557 {
558 Bukkit.getConsoleSender().sendMessage(ChatColor.RED+"MySQL ERROR 8 : "+e);
559
560
561 }
562 finally {
563 if (con != null){
564 try{
565 con.close();
566 }catch (Exception e){
567 Bukkit.getConsoleSender().sendMessage(ChatColor.RED+"MySQL ERROR 19 : "+e); }
568 }
569 }
570
571
572 }
573
574 public void RefreshLevel(Player _player,int level){
575 int increment = 0;
576 String activeclass = "";
577 activeclass = PlayerClass.getCurrentClass(_player);
578 //_player.sendMessage("refresh ok");
579 //calculate level if current level is different from the db level , change the db level with the current
580 int levelold = LoadLevel(_player);
581 //_player.sendMessage("current level : "+level +" - level db : "+levelold);
582 if(level != levelold){
583 increment = level -levelold;
584 //_player.sendMessage("increment done : " + increment);
585 }
586 if (increment != 0){
587 //_player.sendMessage("level + "+increment);
588 addLevelToClass(increment,_player,activeclass);
589 }
590 //_player.sendMessage("inc done");
591
592 }
593
594
595
596 public void addLevelToClass(int Increment,Player _player,String ClassName){
597 Connection con = null;
598 int i=0;
599
600 try {
601 con = plugin.hikari.getConnection();
602 //_player.sendMessage("Connection is closed : "+con.isClosed());
603
604 PreparedStatement preparedStmt = con.prepareStatement("UPDATE Players SET level_"+ ClassName + "= level_" + ClassName +" + ? where UUID= ? ");
605 preparedStmt.setInt(1, Increment);
606 preparedStmt.setString(2, _player.getUniqueId().toString());
607 i = preparedStmt.executeUpdate();
608 if (i > 0) {
609 _player.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText("Level up!"));
610 Bonus(_player);
611 } else {
612 Bukkit.getConsoleSender().sendMessage(ChatColor.RED+"ERROR 15 : ");
613 }
614 preparedStmt.close();
615
616
617 }
618 catch (Exception e)
619 {
620 //Bukkit.getConsoleSender().sendMessage(ChatColor.RED+"MySQL ERROR 16 : "+e);
621
622 }
623 finally {
624 if (con != null){
625 try{
626 con.close();
627 }catch (Exception e){
628 Bukkit.getConsoleSender().sendMessage(ChatColor.RED+"MySQL ERROR 18 : "+e); }
629 }
630 }
631
632 }
633
634 public void Bonus(Player _player){
635
636 int mylevel = LoadLevel(_player);
637 double hp = 0;
638 String myclass = PlayerClass.getCurrentClass(_player);
639
640
641 ConfigurationSection bonus = plugin.getConfig().getConfigurationSection("Bonus_"+myclass);
642 Set<String> level = bonus.getKeys(false);
643
644 //search in config for the mob , if it can find it add the souls_mob
645 for (String lv : level){
646 ConfigurationSection currentBonusSection = bonus.getConfigurationSection(lv);
647 // _player.sendMessage("lv:"+lv+" - mylevel : "+mylevel);
648 int num = Integer.parseInt(lv);
649 if(num == mylevel){
650 hp = currentBonusSection.getDouble("hp");
651 String spell = currentBonusSection.getString("spell");
652 //_player.sendMessage("hp : "+hp );
653
654 if(hp > 0){
655 // _player.sendMessage("hp max: "+hp);
656 _player.getAttribute(Attribute.GENERIC_MAX_HEALTH).setBaseValue(hp);
657 //playerClass.addHP(_player,hp);
658
659 }
660
661 if (!spell.equals("")){
662 PlayerClass.getMagicAPI().getController().getMage(_player).getActiveClass().addSpell(spell);
663
664 ///playerClass.addSpell(_player,spell);
665
666 }
667
668
669 }
670 }
671 }
672
673 //endregion MethodsDB
674
675
676
677
678}