A claim plugin based on FTB Chunks
at master 10 kB view raw
1package dev.keii.keiichunks; 2 3import dev.keii.keiichunks.commands.CommandMap; 4import dev.keii.keiichunks.events.*; 5import dev.keii.keiichunks.saveload.Claim; 6import dev.keii.keiichunks.saveload.ClaimPermission; 7import dev.keii.keiichunks.saveload.User; 8import net.kyori.adventure.text.Component; 9import net.kyori.adventure.text.format.NamedTextColor; 10import org.bukkit.Bukkit; 11import org.bukkit.plugin.PluginManager; 12import org.bukkit.plugin.java.JavaPlugin; 13import org.joml.Vector2i; 14 15import java.io.FileWriter; 16import java.io.IOException; 17import java.sql.Connection; 18import java.sql.ResultSet; 19import java.sql.SQLException; 20import java.sql.Statement; 21import java.util.ArrayList; 22import java.util.HashMap; 23import java.util.List; 24import java.io.File; 25import java.util.Map; 26 27public final class KeiiChunks extends JavaPlugin { 28 29 private static KeiiChunks instance; 30 public static List<RuntimeError> RuntimeErrors = new ArrayList<>(); 31 32 public static Map<Vector2i, Claim> claims = new HashMap<>(); 33 public static Map<String, User> users = new HashMap<>(); 34 public static Map<Long, ClaimPermission> claimPermissions = new HashMap<>(); 35 36 public static Config config; 37 38 @Override 39 public void onEnable() { 40 instance = this; 41 42 config = new Config(); 43 config.loadConfig(); 44 45 File pluginDir = new File("./plugins/KeiiChunks"); 46 if (!pluginDir.exists()){ 47 if(!pluginDir.mkdirs()) { 48 Bukkit.getServer().sendMessage(Component.text("Creating plugin folders failed").color(NamedTextColor.RED)); 49 } 50 } 51 File sqlFile = new File("./plugins/KeiiChunks/database.sql"); 52 try { 53 if (!sqlFile.createNewFile()){ 54 Bukkit.getServer().sendMessage(Component.text("Creating sql file failed").color(NamedTextColor.RED)); 55 } else { 56 FileWriter myWriter = new FileWriter("./plugins/KeiiChunks/database.sql"); 57 myWriter.write(DatabaseConnector.createDatabaseSqlMySQL); 58 myWriter.close(); 59 Bukkit.getServer().sendMessage(Component.text("Created sql file").color(NamedTextColor.YELLOW)); 60 } 61 } catch (IOException e) { 62 throw new RuntimeException(e); 63 } 64 DatabaseConnector.InitializeDatabase(); 65 66 registerEvents(); 67 registerCommands(); 68 } 69 70 public void registerEvents() { 71 //This first line is optional, makes it faster with lots of classes 72 PluginManager pm = Bukkit.getServer().getPluginManager(); 73 pm.registerEvents(new PlayerJoin(), this); 74 pm.registerEvents(new PlayerQuit(), this); 75 pm.registerEvents(new BlockBreak(), this); 76 pm.registerEvents(new BlockPlace(), this); 77 pm.registerEvents(new BucketEmpty(), this); 78 pm.registerEvents(new BucketFill(), this); 79 pm.registerEvents(new PlayerInteract(), this); 80 pm.registerEvents(new InventoryClick(), this); 81 pm.registerEvents(new PlayerMove(), this); 82 pm.registerEvents(new EntityExplode(), this); 83 pm.registerEvents(new PlayerChat(), this); 84 pm.registerEvents(new PlayerResourcePack(), this); 85 } 86 87 public void registerCommands() { 88 this.getCommand("map").setExecutor(new CommandMap()); 89 } 90 91 @Override 92 public void onDisable() { 93 // Plugin shutdown logic 94 } 95 96 public static KeiiChunks getInstance() 97 { 98 return instance; 99 } 100 101 public static void SaveData() 102 { 103 Connection connection = DatabaseConnector.getConnection(); 104 try { 105 connection.setAutoCommit(false); 106 Statement statement = connection.createStatement(); 107 108 Bukkit.getServer().broadcast(Component.text("Server is saving! Expect some lag.").color(NamedTextColor.YELLOW)); 109 110 statement.execute("DELETE FROM user;"); 111 Bukkit.getServer().sendMessage(Component.text("Saving: Deleted users in database").color(NamedTextColor.YELLOW)); 112 113 for(User user : users.values()) 114 { 115 statement.execute(String.format("INSERT INTO user(id, uuid, timestamp, claim_power) VALUES(%d, %s, %s, %d)", user.id, user.uuid, user.timestamp, user.claimPower)); 116 } 117 Bukkit.getServer().sendMessage(Component.text("Saving: Saved new users into database").color(NamedTextColor.YELLOW)); 118 119 statement.execute("DELETE FROM claim;"); 120 Bukkit.getServer().sendMessage(Component.text("Saving: Deleted claims in database").color(NamedTextColor.YELLOW)); 121 122 for(Claim claim : claims.values()) 123 { 124 statement.execute(String.format("INSERT INTO claim(id, user_id, chunk_x, chunk_z, created_at, updated_at, allow_explosions) VALUES(%d, %d, %d, %d, %s, %s, %d)", claim.id, claim.userId, claim.chunkX, claim.chunkZ, claim.createdAt, claim.updatedAt, claim.allowExplosions ? 1 : 0)); 125 } 126 Bukkit.getServer().sendMessage(Component.text("Saving: Saved new claims into database").color(NamedTextColor.YELLOW)); 127 128 statement.execute("DELETE FROM claim_permission;"); 129 Bukkit.getServer().sendMessage(Component.text("Saving: Delete claim permissions in database").color(NamedTextColor.YELLOW)); 130 131 for(ClaimPermission claimPermission : claimPermissions.values()) 132 { 133 statement.execute(String.format("INSERT INTO claim_permission(id, user_id, claim_id, block_break, block_place, bucket_empty, bucket_fill, interact, created_at, updated_at) VALUES(%d, %d, %d, %d, %d, %d, %d, %d, %s, %s)", claimPermission.id, claimPermission.userId, claimPermission.claimId, claimPermission.blockBreak ? 1 : 0, claimPermission.blockPlace ? 1 : 0, claimPermission.bucketEmpty ? 1 : 0, claimPermission.bucketFill ? 1 : 0, claimPermission.interact ? 1 : 0, claimPermission.createdAt, claimPermission.updatedAt)); 134 } 135 Bukkit.getServer().sendMessage(Component.text("Saving: Saved new claim permissions into database").color(NamedTextColor.YELLOW)); 136 137 Bukkit.getServer().broadcast(Component.text("Save complete!").color(NamedTextColor.GREEN)); 138 139 connection.commit(); 140 statement.close(); 141 connection.close(); 142 return; 143 } catch (SQLException e) { 144 Bukkit.getServer().broadcast(Component.text("Save failed!").color(NamedTextColor.RED)); 145 try { 146 connection.rollback(); 147 } catch (SQLException ex) { 148 throw new RuntimeException(ex); 149 } 150 Bukkit.getServer().sendMessage(Component.text(e.getMessage()).color(NamedTextColor.RED)); 151 e.printStackTrace(); 152 } 153 } 154 155 public static void LoadData() 156 { 157 Connection connection = DatabaseConnector.getConnection(); 158 try { 159 Bukkit.getServer().broadcast(Component.text("Server is saving! Expect some lag.").color(NamedTextColor.YELLOW)); 160 161 Statement statement = connection.createStatement(); 162 163 ResultSet users = statement.executeQuery("SELECT * FROM user;"); 164 165 while(users.next()) 166 { 167 long id = users.getLong("id"); 168 String uuid = users.getString("uuid"); 169 String timestamp = users.getString("timestamp"); 170 int claimPower = users.getInt("claimPower"); 171 172 KeiiChunks.users.put(uuid, new User(id, uuid, timestamp, claimPower)); 173 } 174 175 users.close(); 176 Bukkit.getServer().sendMessage(Component.text("Loading: Loaded users").color(NamedTextColor.YELLOW)); 177 178 ResultSet claims = statement.executeQuery("SELECT * FROM claim;"); 179 180 while(claims.next()) 181 { 182 long id = claims.getLong("id"); 183 long userId = claims.getLong("user_id"); 184 long chunkX = claims.getLong("chunk_x"); 185 long chunkZ = claims.getLong("chunk_z"); 186 String createdAt = claims.getString("created_at"); 187 String updatedAt = claims.getString("updated_at"); 188 boolean allowExplosions = claims.getBoolean("allow_explosions"); 189 190 KeiiChunks.claims.put(new Vector2i((int) chunkX, (int) chunkZ), new Claim(id, userId, chunkX, chunkZ, createdAt, updatedAt, allowExplosions)); 191 } 192 193 claims.close(); 194 Bukkit.getServer().sendMessage(Component.text("Loading: Loaded claims").color(NamedTextColor.YELLOW)); 195 196 ResultSet claimPermission = statement.executeQuery("SELECT * FROM claim_permission;"); 197 198 while(claimPermission.next()) 199 { 200 long id = claims.getLong("id"); 201 long userId = claims.getLong("user_id"); 202 long claimId = claims.getLong("chunk_x"); 203 boolean blockBreak = claims.getBoolean("block_break"); 204 boolean blockPlace = claims.getBoolean("block_place"); 205 boolean bucketEmpty = claims.getBoolean("bucket_empty"); 206 boolean bucketFill = claims.getBoolean("bucket_fill"); 207 boolean interact = claims.getBoolean("interact"); 208 String createdAt = claims.getString("created_at"); 209 String updatedAt = claims.getString("updated_at"); 210 211 KeiiChunks.claimPermissions.put(claimId, new ClaimPermission(id, userId, claimId, blockBreak, blockPlace, bucketEmpty, bucketFill, interact, createdAt, updatedAt)); 212 } 213 214 claimPermission.close(); 215 Bukkit.getServer().sendMessage(Component.text("Loading: Loaded claim permissions").color(NamedTextColor.YELLOW)); 216 217 Bukkit.getServer().broadcast(Component.text("Load complete!").color(NamedTextColor.GREEN)); 218 statement.close(); 219 connection.close(); 220 } catch (SQLException e) { 221 Bukkit.getServer().broadcast(Component.text("Save failed!").color(NamedTextColor.RED)); 222 Bukkit.getServer().broadcast(Component.text(e.getMessage()).color(NamedTextColor.RED)); 223 e.printStackTrace(); 224 } 225 } 226}