A claim plugin based on FTB Chunks
at master 97 lines 3.5 kB view raw
1package dev.keii.keiichunks.events; 2 3import dev.keii.keiichunks.DatabaseConnector; 4import dev.keii.keiichunks.KeiiChunks; 5import dev.keii.keiichunks.PlayerChunk; 6import net.kyori.adventure.text.Component; 7import net.kyori.adventure.text.format.NamedTextColor; 8import org.bukkit.Bukkit; 9import org.bukkit.Chunk; 10import org.bukkit.entity.Player; 11import org.bukkit.event.EventHandler; 12import org.bukkit.event.Listener; 13import org.bukkit.event.block.BlockBreakEvent; 14 15import java.sql.Connection; 16import java.sql.ResultSet; 17import java.sql.SQLException; 18import java.sql.Statement; 19 20import static dev.keii.keiichunks.PlayerChunk.getChunkPermissionString; 21 22public class BlockBreak implements Listener { 23 24 public static boolean getPlayerPermissionForChunk(Player player, Chunk chunk, PlayerChunk.ChunkPermission perm) 25 { 26 boolean canBreak = true; 27 28 try { 29 Connection connection = DatabaseConnector.getConnection(); 30 Statement statement = connection.createStatement(); 31 32 ResultSet claimResultSet = statement.executeQuery("SELECT * FROM claim WHERE chunk_x = " + chunk.getX() + " AND chunk_z = " + chunk.getZ()); 33 34 if(!claimResultSet.next()) // Claim doesn't exist 35 { 36 claimResultSet.close(); 37 statement.close(); 38 connection.close(); 39 return true; 40 } 41 42 long claimId = claimResultSet.getLong("id"); 43 long claimOwnerId = claimResultSet.getLong("user_id"); 44 claimResultSet.close(); 45 46 ResultSet claimPermissionResultSet = statement.executeQuery("SELECT * FROM claim_permission WHERE user_id IS NULL AND claim_id = " + claimId); 47 48 if(claimPermissionResultSet.next()) 49 { 50 canBreak = claimPermissionResultSet.getBoolean(getChunkPermissionString(perm)); 51 } 52 53 claimPermissionResultSet.close(); 54 55 ResultSet userResultSet = statement.executeQuery( "SELECT id FROM user WHERE uuid = \"" + player.getUniqueId().toString() + "\""); 56 57 if(userResultSet.next()) { 58 if(userResultSet.getLong("id") == claimOwnerId) 59 { 60 canBreak = true; 61 } else { 62 ResultSet claimPermissionUserResultSet = statement.executeQuery("SELECT * FROM claim_permission WHERE user_id = " + userResultSet.getLong("id") + " AND claim_id = " + claimId); 63 64 if (claimPermissionUserResultSet.next()) { 65 canBreak = claimPermissionUserResultSet.getBoolean(getChunkPermissionString(perm)); 66 } 67 68 claimPermissionUserResultSet.close(); 69 } 70 } 71 72 userResultSet.close(); 73 74 statement.close(); 75 connection.close(); 76 } catch (SQLException e) { 77 Bukkit.getServer().broadcast(Component.text("Fatal Database Error: " + e.getMessage()).color(NamedTextColor.RED)); 78 } 79 80 return canBreak; 81 } 82 83 @EventHandler 84 public void onBlockBreak(BlockBreakEvent event) 85 { 86 Player player = event.getPlayer(); 87 Chunk chunk = event.getBlock().getChunk(); 88 89 boolean canBreak = getPlayerPermissionForChunk(player, chunk, PlayerChunk.ChunkPermission.BlockBreak); 90 91 event.setCancelled(!canBreak); 92 if(!canBreak) 93 { 94 player.sendActionBar(Component.text("You do not have the rights to break blocks in this chunk!").color(NamedTextColor.RED)); 95 } 96 } 97}