ProtectionBank.java 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. package me.km.plots;
  2. import java.sql.ResultSet;
  3. import java.sql.SQLException;
  4. import java.util.ArrayList;
  5. import me.km.KajetansMod;
  6. import me.km.databank.IStatement;
  7. import me.km.module.Module;
  8. import me.km.world.ModDimensions;
  9. import net.minecraft.entity.player.EntityPlayer;
  10. import net.minecraft.util.math.BlockPos;
  11. import net.minecraft.util.text.TextFormatting;
  12. import net.minecraft.world.World;
  13. public class ProtectionBank extends Module
  14. {
  15. public ProtectionBank()
  16. {
  17. super("Plots", TextFormatting.GOLD);
  18. KajetansMod.databank.execute("CREATE TABLE IF NOT EXISTS plots ("
  19. + "id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, "
  20. + "x1 int(11) NOT NULL, "
  21. + "y1 int(11) NOT NULL, "
  22. + "z1 int(11) NOT NULL, "
  23. + "x2 int(11) NOT NULL, "
  24. + "y2 int(11) NOT NULL, "
  25. + "z2 int(11) NOT NULL, "
  26. + "world_name varchar(20) NOT NULL, "
  27. + "name varchar(50) NOT NULL, "
  28. + "INDEX (x1, x2), "
  29. + "INDEX (y1, y2), "
  30. + "INDEX (z1, z2), "
  31. + "INDEX (world_name));");
  32. KajetansMod.databank.execute("CREATE TABLE IF NOT EXISTS plot_grant ("
  33. + "id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, "
  34. + "plot_id int(11) NOT NULL, "
  35. + "player_id int(11) NOT NULL, "
  36. + "INDEX plot_id (plot_id), "
  37. + "UNIQUE KEY (plot_id, player_id), "
  38. + "CONSTRAINT plot_grant_ibfk_1 FOREIGN KEY (plot_id) REFERENCES plots (id) ON DELETE CASCADE);");
  39. registerEvent(new Protection());
  40. }
  41. //--------------------------------------------------------------------------
  42. // Plot-Methoden
  43. //--------------------------------------------------------------------------
  44. private final IStatement add = KajetansMod.databank.createStatement(
  45. "INSERT INTO plots (x1,y1,z1,x2,y2,z2,world_name,name) VALUES (?,?,?,?,?,?,?,?);");
  46. public void add(int x1, int y1, int z1, int x2, int y2, int z2, String worldName, String plotName)
  47. {
  48. int minX = Math.min(x1, x2);
  49. int minY = Math.min(y1, y2);
  50. int minZ = Math.min(z1, z2);
  51. int maxX = Math.max(x1, x2);
  52. int maxY = Math.max(y1, y2);
  53. int maxZ = Math.max(z1, z2);
  54. try
  55. {
  56. add.validate();
  57. add.setInt(1, minX);
  58. add.setInt(2, minY);
  59. add.setInt(3, minZ);
  60. add.setInt(4, maxX);
  61. add.setInt(5, maxY);
  62. add.setInt(6, maxZ);
  63. add.setString(7, worldName);
  64. add.setString(8, plotName);
  65. add.executeUpdate();
  66. }
  67. catch(SQLException ex)
  68. {
  69. ex.printStackTrace();
  70. }
  71. }
  72. private final IStatement removePlayer = KajetansMod.databank.createStatement(
  73. "DELETE FROM plot_grant WHERE plot_id = ? AND player_id = ?;");
  74. public void removePlayer(int plotId, int playerId)
  75. {
  76. try
  77. {
  78. removePlayer.validate();
  79. removePlayer.setInt(1, plotId);
  80. removePlayer.setInt(2, playerId);
  81. removePlayer.executeUpdate();
  82. }
  83. catch(SQLException ex)
  84. {
  85. ex.printStackTrace();
  86. }
  87. }
  88. private final IStatement addPlayer = KajetansMod.databank.createStatement(
  89. "INSERT IGNORE INTO plot_grant (plot_id, player_id) VALUES(?,?);");
  90. public void addPlayer(int plotId, int playerId)
  91. {
  92. try
  93. {
  94. addPlayer.validate();
  95. addPlayer.setInt(1, plotId);
  96. addPlayer.setInt(2, playerId);
  97. addPlayer.executeUpdate();
  98. }
  99. catch(SQLException ex)
  100. {
  101. ex.printStackTrace();
  102. }
  103. }
  104. private final IStatement isOverlapping = KajetansMod.databank.createStatement(
  105. "SELECT id FROM plots WHERE x2 >= ? AND ? >= x1 AND y2 >= ? AND ? >= y1 AND z2 >= ? AND ? >= z1 AND world_name=?;");
  106. public boolean isOverlapping(int x1, int y1, int z1, int x2, int y2, int z2, World w)
  107. {
  108. int minX = Math.min(x1, x2);
  109. int minY = Math.min(y1, y2);
  110. int minZ = Math.min(z1, z2);
  111. int maxX = Math.max(x1, x2);
  112. int maxY = Math.max(y1, y2);
  113. int maxZ = Math.max(z1, z2);
  114. try
  115. {
  116. isOverlapping.validate();
  117. isOverlapping.setInt(1, minX);
  118. isOverlapping.setInt(2, maxX);
  119. isOverlapping.setInt(3, minY);
  120. isOverlapping.setInt(4, maxY);
  121. isOverlapping.setInt(5, minZ);
  122. isOverlapping.setInt(6, maxZ);
  123. try(ResultSet rs = isOverlapping.executeQuery())
  124. {
  125. return rs.next();
  126. }
  127. catch(SQLException ex)
  128. {
  129. ex.printStackTrace();
  130. }
  131. }
  132. catch(SQLException ex)
  133. {
  134. ex.printStackTrace();
  135. }
  136. return false;
  137. }
  138. private final IStatement getIds = KajetansMod.databank.createStatement(
  139. "SELECT id FROM plots WHERE x1<=? AND x2>=? AND y1<=? AND y2>=? AND z1<=? AND z2>=? AND world_name=?;");
  140. public ArrayList<Double> getIds(int x, int y, int z, String worldName)
  141. {
  142. ArrayList<Double> list = new ArrayList<>();
  143. try
  144. {
  145. getIds.validate();
  146. getIds.setInt(1, x);
  147. getIds.setInt(2, x);
  148. getIds.setInt(3, y);
  149. getIds.setInt(4, y);
  150. getIds.setInt(5, z);
  151. getIds.setInt(6, z);
  152. getIds.setString(7, worldName);
  153. try(ResultSet rs = getIds.executeQuery())
  154. {
  155. while(rs.next())
  156. {
  157. list.add((double) rs.getInt(1));
  158. }
  159. }
  160. catch(SQLException ex)
  161. {
  162. ex.printStackTrace();
  163. }
  164. }
  165. catch(SQLException ex)
  166. {
  167. ex.printStackTrace();
  168. }
  169. return list;
  170. }
  171. private final IStatement canBuild = KajetansMod.databank.createStatement(
  172. "SELECT id FROM plot_grant WHERE plot_id=? AND player_id=?;");
  173. public boolean canBuild(int x, int y, int z, String worldName, int playerId)
  174. {
  175. ArrayList<Double> ids = getIds(x, y, z, worldName);
  176. if(ids.isEmpty())
  177. {
  178. return true;
  179. }
  180. for(double plotId : ids)
  181. {
  182. try
  183. {
  184. canBuild.validate();
  185. canBuild.setInt(1, (int) plotId);
  186. canBuild.setInt(2, playerId);
  187. try(ResultSet rs = canBuild.executeQuery())
  188. {
  189. if(rs.next())
  190. {
  191. return true;
  192. }
  193. }
  194. catch(SQLException ex)
  195. {
  196. ex.printStackTrace();
  197. }
  198. }
  199. catch(SQLException ex)
  200. {
  201. ex.printStackTrace();
  202. }
  203. }
  204. return false;
  205. }
  206. public boolean canBuild(World w, BlockPos pos, EntityPlayer p)
  207. {
  208. return canBuild(pos.getX(), pos.getY(), pos.getZ(), ModDimensions.getWorldName(w), KajetansMod.playerbank.getPlayerId(p.getUniqueID()));
  209. }
  210. private final IStatement remove = KajetansMod.databank.createStatement(
  211. "DELETE FROM plots WHERE id=?;");
  212. public void remove(int plotId)
  213. {
  214. try
  215. {
  216. remove.validate();
  217. remove.setInt(1, plotId);
  218. remove.executeUpdate();
  219. }
  220. catch(SQLException ex)
  221. {
  222. ex.printStackTrace();
  223. }
  224. }
  225. private final IStatement getName = KajetansMod.databank.createStatement(
  226. "SELECT name FROM plots WHERE id=?;");
  227. public String getName(int plotId)
  228. {
  229. try
  230. {
  231. getName.validate();
  232. getName.setInt(1, plotId);
  233. try(ResultSet rs = getName.executeQuery())
  234. {
  235. if(rs.next())
  236. {
  237. return rs.getString(1);
  238. }
  239. return "-error-";
  240. }
  241. catch(SQLException ex)
  242. {
  243. ex.printStackTrace();
  244. }
  245. }
  246. catch(SQLException ex)
  247. {
  248. ex.printStackTrace();
  249. }
  250. return "-error-";
  251. }
  252. }