ScriptBank.java 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. package me.km.snuviscript;
  2. import java.sql.PreparedStatement;
  3. import java.sql.ResultSet;
  4. import me.hammerle.snuviscript.code.SnuviUtils;
  5. import me.km.databank.DataBank;
  6. import me.km.playerbank.PlayerManager;
  7. public class ScriptBank implements IScriptBank {
  8. private final DataBank databank;
  9. private final PreparedStatement getVar;
  10. private final PreparedStatement getMapValue;
  11. private final PreparedStatement getDualMapValue;
  12. public ScriptBank(DataBank databank, PlayerManager manager) {
  13. this.databank = databank;
  14. databank.execute("CREATE TABLE IF NOT EXISTS scriptdata ("
  15. + "id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, "
  16. + "player_id INT NOT NULL, "
  17. + "var VARCHAR(20) NOT NULL, "
  18. + "value VARCHAR(256) NOT NULL, "
  19. + "UNIQUE INDEX (player_id,var), "
  20. + "FOREIGN KEY (player_id) REFERENCES minecraft.players(id) ON DELETE RESTRICT);");
  21. databank.execute("CREATE TABLE IF NOT EXISTS scriptmaps ("
  22. + "id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, "
  23. + "map VARCHAR(255) NOT NULL, "
  24. + "keyname VARCHAR(255) NOT NULL, "
  25. + "value VARCHAR(255) NOT NULL, "
  26. + "INDEX (map), "
  27. + "UNIQUE INDEX (map,keyname));");
  28. databank.execute("CREATE TABLE IF NOT EXISTS scriptdualmaps ("
  29. + "id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, "
  30. + "map VARCHAR(255) NOT NULL, "
  31. + "keyname VARCHAR(255) NOT NULL, "
  32. + "seckeyname VARCHAR(255) NOT NULL, "
  33. + "value VARCHAR(255) NOT NULL, "
  34. + "INDEX (map), "
  35. + "UNIQUE INDEX (map,keyname,seckeyname));");
  36. getVar = databank.prepareStatement("SELECT value from scriptdata WHERE player_id = ? and var = ?;");
  37. getMapValue = databank.prepareStatement("SELECT value from scriptmaps WHERE map = ? AND keyname = ?;");
  38. getDualMapValue = databank.prepareStatement("SELECT value from scriptdualmaps WHERE map = ? AND keyname = ? AND seckeyname = ?;");
  39. }
  40. @Override
  41. public void setVar(String value, String var, int playerId) throws Exception {
  42. try(PreparedStatement setVar = databank.prepareStatement(
  43. "INSERT INTO scriptdata (player_id,var,value) SELECT ?, ?, ? ON DUPLICATE KEY UPDATE scriptdata.value=?;")) {
  44. setVar.setInt(1, playerId);
  45. setVar.setString(2, var);
  46. setVar.setString(3, value);
  47. setVar.setString(4, value);
  48. setVar.executeUpdate();
  49. }
  50. }
  51. @Override
  52. public void deleteVar(String var, int playerId) throws Exception {
  53. try(PreparedStatement deleteVar = databank.prepareStatement(
  54. "DELETE FROM scriptdata WHERE player_id = ? AND var = ?;")) {
  55. deleteVar.setInt(1, playerId);
  56. deleteVar.setString(2, var);
  57. deleteVar.executeUpdate();
  58. }
  59. }
  60. @Override
  61. public Object getVar(String var, int playerId, Object error) throws Exception {
  62. getVar.setInt(1, playerId);
  63. getVar.setString(2, var);
  64. try(ResultSet rs = getVar.executeQuery()) {
  65. if(rs.next()) {
  66. return SnuviUtils.convert(rs.getString(1));
  67. }
  68. return error;
  69. }
  70. }
  71. @Override
  72. public Object getVar(String var, int playerId) throws Exception {
  73. return getVar(var, playerId, null);
  74. }
  75. @Override
  76. public void addMapElement(String map, String key, String value) throws Exception {
  77. try(PreparedStatement addMapElement = databank.prepareStatement(
  78. "INSERT INTO scriptmaps (map,keyname,value) SELECT ?, ?, ? ON DUPLICATE KEY UPDATE value=?;")) {
  79. addMapElement.setString(1, map);
  80. addMapElement.setString(2, key);
  81. addMapElement.setString(3, value);
  82. addMapElement.setString(4, value);
  83. addMapElement.executeUpdate();
  84. }
  85. }
  86. @Override
  87. public void removeMapElement(String map, String key) throws Exception {
  88. try(PreparedStatement removeMapElement = databank.prepareStatement(
  89. "DELETE FROM scriptmaps WHERE map = ? AND keyname = ?;")) {
  90. removeMapElement.setString(1, map);
  91. removeMapElement.setString(2, key);
  92. removeMapElement.executeUpdate();
  93. }
  94. }
  95. @Override
  96. public void removeMap(String map) throws Exception {
  97. try(PreparedStatement removeMap = databank.prepareStatement(
  98. "DELETE FROM scriptmaps WHERE map = ?;")) {
  99. removeMap.setString(1, map);
  100. removeMap.executeUpdate();
  101. }
  102. }
  103. @Override
  104. public Object getMapValue(String map, String key) throws Exception {
  105. getMapValue.setString(1, map);
  106. getMapValue.setString(2, key);
  107. try(ResultSet rs = getMapValue.executeQuery()) {
  108. if(rs.next()) {
  109. return SnuviUtils.convert(rs.getString(1));
  110. }
  111. return null;
  112. }
  113. }
  114. @Override
  115. public void addDualMapElement(String map, String key, String key2, String value) throws Exception {
  116. try(PreparedStatement addDualMapElement = databank.prepareStatement(
  117. "INSERT INTO scriptdualmaps (map,keyname,seckeyname,value) SELECT ?, ?, ?, ? ON DUPLICATE KEY UPDATE value=?;")) {
  118. addDualMapElement.setString(1, map);
  119. addDualMapElement.setString(2, key);
  120. addDualMapElement.setString(3, key2);
  121. addDualMapElement.setString(4, value);
  122. addDualMapElement.setString(5, value);
  123. addDualMapElement.executeUpdate();
  124. }
  125. }
  126. @Override
  127. public void removeDualMapElement(String map, String key) throws Exception {
  128. try(PreparedStatement removeDualMapElement = databank.prepareStatement(
  129. "DELETE FROM scriptdualmaps WHERE map = ? AND keyname = ?;")) {
  130. removeDualMapElement.setString(1, map);
  131. removeDualMapElement.setString(2, key);
  132. removeDualMapElement.executeUpdate();
  133. }
  134. }
  135. @Override
  136. public void removeDualMap(String map) throws Exception {
  137. try(PreparedStatement removeDualMap = databank.prepareStatement(
  138. "DELETE FROM scriptdualmaps WHERE map = ?;")) {
  139. removeDualMap.setString(1, map);
  140. removeDualMap.executeUpdate();
  141. }
  142. }
  143. @Override
  144. public void removeDualMapElement(String map, String key, String key2) throws Exception {
  145. try(PreparedStatement removeDualMapElement2 = databank.prepareStatement(
  146. "DELETE FROM scriptdualmaps WHERE map = ? AND keyname = ? AND seckeyname = ?;")) {
  147. removeDualMapElement2.setString(1, map);
  148. removeDualMapElement2.setString(2, key);
  149. removeDualMapElement2.setString(3, key2);
  150. removeDualMapElement2.executeUpdate();
  151. }
  152. }
  153. @Override
  154. public Object getDualMapValue(String map, String key, String key2) throws Exception {
  155. getDualMapValue.setString(1, map);
  156. getDualMapValue.setString(2, key);
  157. getDualMapValue.setString(3, key2);
  158. try(ResultSet rs = getDualMapValue.executeQuery()) {
  159. if(rs.next()) {
  160. return SnuviUtils.convert(rs.getString(1));
  161. }
  162. return null;
  163. }
  164. }
  165. }