1919import static me .onebone .economyapi .EconomyAPI .MAIN_CONFIG ;
2020
2121public class MySQLProvider implements Provider {
22- private static SqlManager manager ;
22+ private static volatile SqlManager manager ;
2323 private static String TABLE_NAME_PREFIX = "" ;
2424 private final ReadWriteLock lock = new ReentrantReadWriteLock ();
2525
2626 public static void initTablePrefix (String prefix ) {
2727 MySQLProvider .TABLE_NAME_PREFIX = prefix ;
2828 }
2929
30+ private static boolean isReady () {
31+ return MySQLProvider .manager != null ;
32+ }
33+
3034 @ Override
3135 public void init (File path ) {
3236 if (MySQLProvider .manager != null && MySQLProvider .manager .isEnable ()) {
@@ -35,8 +39,7 @@ public void init(File path) {
3539 }
3640
3741 if (!MAIN_CONFIG .getConfig ().exists ("sql.mysql" )) {
38- EconomyAPI .getInstance ().getLogger ().error ("MySQL is not configured." );
39- return ;
42+ throw new RuntimeException ("MySQL is not configured." );
4043 }
4144 ConfigSection mysqlSection = MAIN_CONFIG .getConfig ().getSection ("sql.mysql" );
4245 String host = mysqlSection .getString ("host" , "localhost" );
@@ -47,26 +50,24 @@ public void init(File path) {
4750 String tablePrefix = mysqlSection .getString ("table-prefix" , "v1_" );
4851 MySQLProvider .initTablePrefix (tablePrefix );
4952
50- Server .getInstance ().getScheduler ().scheduleTask (EconomyAPI .getInstance (), () -> {
51- try {
52- SqlManager manager = new SqlManager (EconomyAPI .getInstance (), new UserData (
53- username , password , host , port , database
54- ));
55- MySQLProvider .manager = manager ;
56-
57- MAIN_CONFIG .getCurrencyList ().forEach (currencyName -> {
58- manager .createTable (
59- TABLE_NAME_PREFIX + currencyName ,
60- new TableType ("player" , DataType .getUUID (), true ),
61- new TableType ("money" , DataType .getBIGINT (), false )
62- );
63- });
64- EconomyAPI .getInstance ().getLogger ().info ("MySQL initialized!" );
65- } catch (MySqlLoginException e ) {
66- EconomyAPI .getInstance ().getLogger ().error ("MySQL connection failed." , e );
67- Server .getInstance ().getPluginManager ().disablePlugin (EconomyAPI .getInstance ());
68- }
69- }, true );
53+ try {
54+ SqlManager manager = new SqlManager (EconomyAPI .getInstance (), new UserData (
55+ username , password , host , port , database
56+ ));
57+ MySQLProvider .manager = manager ;
58+
59+ MAIN_CONFIG .getCurrencyList ().forEach (currencyName -> {
60+ manager .createTable (
61+ TABLE_NAME_PREFIX + currencyName ,
62+ new TableType ("player" , DataType .getUUID (), true ),
63+ new TableType ("money" , DataType .getBIGINT (), false )
64+ );
65+ });
66+ EconomyAPI .getInstance ().getLogger ().info ("MySQL initialized!" );
67+ } catch (MySqlLoginException e ) {
68+ EconomyAPI .getInstance ().getLogger ().error ("MySQL connection failed." , e );
69+ Server .getInstance ().getPluginManager ().disablePlugin (EconomyAPI .getInstance ());
70+ }
7071 }
7172
7273 @ Override
@@ -97,6 +98,7 @@ public void close() {
9798 public boolean accountExists (String currencyName , String id ) {
9899 lock .readLock ().lock ();
99100 try {
101+ if (!isReady ()) return false ;
100102 if (!MAIN_CONFIG .getCurrencyList ().contains (currencyName )) return false ;
101103 if (MySQLProvider .manager .isExistTable (TABLE_NAME_PREFIX + currencyName )) {
102104 return MySQLProvider .manager .isExistsData (TABLE_NAME_PREFIX + currencyName , "player" , id );
@@ -116,6 +118,7 @@ public boolean accountExists(String id) {
116118 public boolean removeAccount (String currencyName , String id ) {
117119 lock .writeLock ().lock ();
118120 try {
121+ if (!isReady ()) return false ;
119122 if (!MAIN_CONFIG .getCurrencyList ().contains (currencyName )) return false ;
120123 if (MySQLProvider .manager .isExistTable (TABLE_NAME_PREFIX + currencyName )) {
121124 return MySQLProvider .manager .deleteData (TABLE_NAME_PREFIX + currencyName , new SqlData ("player" , id ));
@@ -135,6 +138,7 @@ public boolean removeAccount(String id) {
135138 public boolean createAccount (String currencyName , String id , double defaultMoney ) {
136139 lock .writeLock ().lock ();
137140 try {
141+ if (!isReady ()) return false ;
138142 if (!MAIN_CONFIG .getCurrencyList ().contains (currencyName )) return false ;
139143 long money = (long ) (defaultMoney * 100 );
140144 if (!accountExists (currencyName , id )) {
@@ -156,6 +160,7 @@ public boolean createAccount(String id, double defaultMoney) {
156160 public boolean setMoney (String currencyName , String id , double amount ) {
157161 lock .writeLock ().lock ();
158162 try {
163+ if (!isReady ()) return false ;
159164 if (!MAIN_CONFIG .getCurrencyList ().contains (currencyName )) return false ;
160165 long money = (long ) (amount * 100 );
161166 return MySQLProvider .manager .setData (TABLE_NAME_PREFIX + currencyName , new SqlData ("money" , money ), new SqlData ("player" , id ));
@@ -173,6 +178,7 @@ public boolean setMoney(String id, double amount) {
173178 public boolean addMoney (String currencyName , String id , double amount ) {
174179 lock .writeLock ().lock ();
175180 try {
181+ if (!isReady ()) return false ;
176182 if (!MAIN_CONFIG .getCurrencyList ().contains (currencyName )) return false ;
177183 double current = getMoney (currencyName , id );
178184 if (current == -1 ) return false ;
@@ -192,6 +198,7 @@ public boolean addMoney(String id, double amount) {
192198 public boolean reduceMoney (String currencyName , String id , double amount ) {
193199 lock .writeLock ().lock ();
194200 try {
201+ if (!isReady ()) return false ;
195202 if (!MAIN_CONFIG .getCurrencyList ().contains (currencyName )) return false ;
196203 double current = getMoney (currencyName , id );
197204 if (current == -1 ) return false ;
@@ -211,6 +218,7 @@ public boolean reduceMoney(String id, double amount) {
211218 public double getMoney (String currencyName , String id ) {
212219 lock .readLock ().lock ();
213220 try {
221+ if (!isReady ()) return -1 ;
214222 if (!MAIN_CONFIG .getCurrencyList ().contains (currencyName )) return -1 ;
215223 SqlDataList <SqlData > sqlDataList = MySQLProvider .manager .getData (TABLE_NAME_PREFIX + currencyName , "money" , new SqlData ("player" , id ));
216224 if (sqlDataList .isEmpty ()) return -1 ;
@@ -230,6 +238,7 @@ public LinkedHashMap<String, Double> getAll(String currencyName) {
230238 lock .readLock ().lock ();
231239 try {
232240 LinkedHashMap <String , Double > map = new LinkedHashMap <>();
241+ if (!isReady ()) return map ;
233242 if (!MAIN_CONFIG .getCurrencyList ().contains (currencyName )) return map ;
234243 SqlData emptyData = new SqlData ();
235244 SqlDataList <SqlData > sqlDataList = MySQLProvider .manager .getData (TABLE_NAME_PREFIX + currencyName , "*" , emptyData );
@@ -266,6 +275,7 @@ public String getName() {
266275 public int setMoneyChecked (String currencyName , String id , double amount , double maxMoney ) {
267276 lock .writeLock ().lock ();
268277 try {
278+ if (!isReady ()) return RET_NO_ACCOUNT ;
269279 if (!MAIN_CONFIG .getCurrencyList ().contains (currencyName )) return RET_NO_ACCOUNT ;
270280 if (!accountExists (currencyName , id )) return RET_NO_ACCOUNT ;
271281 if (amount > maxMoney ) return RET_INVALID ;
@@ -281,6 +291,7 @@ public int setMoneyChecked(String currencyName, String id, double amount, double
281291 public int addMoneyChecked (String currencyName , String id , double amount , double maxMoney ) {
282292 lock .writeLock ().lock ();
283293 try {
294+ if (!isReady ()) return RET_NO_ACCOUNT ;
284295 if (!MAIN_CONFIG .getCurrencyList ().contains (currencyName )) return RET_NO_ACCOUNT ;
285296 double current = getMoney (currencyName , id );
286297 if (current == -1 ) return RET_NO_ACCOUNT ;
@@ -297,6 +308,7 @@ public int addMoneyChecked(String currencyName, String id, double amount, double
297308 public int reduceMoneyChecked (String currencyName , String id , double amount ) {
298309 lock .writeLock ().lock ();
299310 try {
311+ if (!isReady ()) return RET_NO_ACCOUNT ;
300312 if (!MAIN_CONFIG .getCurrencyList ().contains (currencyName )) return RET_NO_ACCOUNT ;
301313 double current = getMoney (currencyName , id );
302314 if (current == -1 ) return RET_NO_ACCOUNT ;
0 commit comments