ich überarbeite ab morgen mein PermissionsSystem 'Protected!'. Die neue Version, also die BETA, wird dann noch mehr Features mit sich bringen, wie zum Beispiel das Demoten von Spielern, direktes setzen der Gruppen, ...
Die ALPHA will ich euch dafür hier jetzt mal geben, damit ihr nicht auf PermisisonsEX oder so zurückgreifen müsst.
Als erstes benötigt ihr einmal MySQL.class, die so aufgebaut ist, wie die von @PostCrafter. Ich werde euch meine (die glaube ich von PostCrafter kopiert wurde *copy'n'paste*) hier mal bereit stellen:
- Code: Alles auswählen
- package de.CaveMC.CaveMC.MySQL;
- import java.io.File;
- import java.io.IOException;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import org.bukkit.Bukkit;
- import org.bukkit.configuration.file.FileConfiguration;
- import org.bukkit.configuration.file.YamlConfiguration;
- import de.CaveMC.CaveMC.main.CaveMC;
- public class MySQL {
- private String host;
- private int port;
- private String user;
- private String password;
- private String database;
- public static Connection conn;
- public MySQL() throws Exception {
- File file = new File("plugins/CaveMC/", "config.yml");
- FileConfiguration cfg = YamlConfiguration.loadConfiguration(file);
- String db = "database.";
- if(!file.exists()) {
- cfg.addDefault(db + "host", "localhost");
- cfg.addDefault(db + "port", 3306);
- cfg.addDefault(db + "user", "user");
- cfg.addDefault(db + "password", "password");
- cfg.addDefault(db + "database", "database");
- cfg.options().copyDefaults(true);
- try {
- cfg.save(file);
- } catch (IOException e) {
- Bukkit.getConsoleSender().sendMessage(CaveMC.prefix_MySQL + "§cCan't create config-File!");
- e.printStackTrace();
- }
- }
- this.host = cfg.getString(db + "host");
- this.port = cfg.getInt(db + "port");
- this.user = cfg.getString(db + "user");
- this.password = cfg.getString(db + "password");
- this.database = cfg.getString(db + "database");
- this.openConnection();
- }
- public Connection openConnection() throws Exception {
- Class.forName("com.mysql.jdbc.Driver");
- Connection conn = DriverManager.getConnection("jdbc:mysql://" + this.host + ":" + this.port + "/" + this.database, this.user, this.password);
- MySQL.conn = conn;
- return conn;
- }
- public Connection getConnection() {
- return MySQL.conn;
- }
- public boolean hasConnection() {
- try {
- return MySQL.conn != null || MySQL.conn.isValid(1);
- } catch (SQLException e) {
- return false;
- }
- }
- public void queryUpdate(String query) {
- Connection conn = MySQL.conn;
- PreparedStatement st = null;
- try {
- st = conn.prepareStatement(query);
- st.executeUpdate();
- } catch (SQLException e) {
- Bukkit.getConsoleSender().sendMessage("§c§lFailed to send update '§7" + query + "§c§l'.");
- } finally {
- this.closeRessources(null, st);
- }
- }
- public void closeRessources(ResultSet rs, PreparedStatement st) {
- if (rs != null) {
- try {
- rs.close();
- } catch (SQLException e) {
- Bukkit.getConsoleSender().sendMessage(CaveMC.prefix_MySQL + "§cCan't close MYSQL-Ressources!");
- }
- }
- if (st != null) {
- try {
- st.close();
- } catch (SQLException e) {
- Bukkit.getConsoleSender().sendMessage(CaveMC.prefix_MySQL + "§cCan't close MYSQL-Ressources!");
- }
- }
- }
- public void closeConnection() {
- try {
- MySQL.conn.close();
- } catch (SQLException e) {
- Bukkit.getConsoleSender().sendMessage(CaveMC.prefix_MySQL + "§cCan't close MYSQL-Connection!");
- } finally {
- MySQL.conn = null;
- }
- }
- }
Nun brauchen wir eine Klasse, für die Ränge. Wie man sehen kann, ist alles hardgecodet, was aber hier nun nicht als schlimm gesehen werden sollte:
- Code: Alles auswählen
- package de.CaveMC.CaveMC.Rank;
- import de.CaveMC.CaveMC.MySQL.MySQL;
- import de.CaveMC.CaveMC.main.CaveMC;
- import java.sql.*;
- import org.bukkit.entity.Player;
- public class Ranks {
- public static void promote(Player p) {
- try {
- Statement st = MySQL.conn.createStatement();
- if(!hasSpecialRank(p)) {
- st.executeUpdate("UPDATE Player SET Rang = 'Premium' WHERE UUID = '" + p.getUniqueId() + "'");
- p.sendMessage(CaveMC.prefix + "Du hast den Rang §6Premium §3erhalten!");
- } else if(getRank(p).equalsIgnoreCase("Premium")) {
- st.executeUpdate("UPDATE Player SET Rang = 'YouTuber' WHERE UUID = '" + p.getUniqueId() + "'");
- p.sendMessage(CaveMC.prefix + "Du hast den Rang §5YouTuber §3erhalten!");
- } else if(getRank(p).equalsIgnoreCase("YouTuber")) {
- st.executeUpdate("UPDATE Player SET Rang = 'Supporter' WHERE UUID = '" + p.getUniqueId() + "'");
- p.sendMessage(CaveMC.prefix + "Du hast den Rang §2Supporter §3erhalten!");
- } else if(getRank(p).equalsIgnoreCase("Supporter")) {
- st.executeUpdate("UPDATE Player SET Rang = 'Developer' WHERE UUID = '" + p.getUniqueId() + "'");
- p.sendMessage(CaveMC.prefix + "Du hast den Rang §3Developer §3erhalten!");
- } else if(getRank(p).equalsIgnoreCase("Developer"))
- st.executeUpdate("UPDATE Player SET Rang = 'Admin' WHERE UUID = '" + p.getUniqueId() + "'");
- p.sendMessage(CaveMC.prefix + "Du hast den Rang §4Admin §3erhalten!");
- } catch(SQLException sqlexception) {
- }
- }
- public static String getRank(Player p) {
- String rang = "";
- ResultSet rs = null;
- try {
- Statement st = MySQL.conn.createStatement();
- rs = st.executeQuery("SELECT * FROM Player WHERE UUID='" + p.getUniqueId() + "'");
- if(hasSpecialRank(p)) {
- while(rs.next())
- rang = rs.getString(2);
- return rang;
- }
- } catch(SQLException sqlexception) {
- }
- return "Player";
- }
- public static boolean hasSpecialRank(Player p) {
- ResultSet rs = null;
- Statement st;
- try {
- st = MySQL.conn.createStatement();
- rs = st.executeQuery("SELECT * FROM Player WHERE UUID='" + p.getUniqueId() + "'");
- while(rs.next())
- if(rs != null)
- return true;
- } catch (SQLException e) {
- e.printStackTrace();
- }
- return false;
- }
- }
und hier ein Beispiel, wie man die Leute promoted:
- Code: Alles auswählen
- package de.CaveMC.CaveMC.commands;
- import org.bukkit.Bukkit;
- import org.bukkit.command.Command;
- import org.bukkit.command.CommandExecutor;
- import org.bukkit.command.CommandSender;
- import org.bukkit.entity.Player;
- import de.CaveMC.CaveMC.Rank.Ranks;
- import de.CaveMC.CaveMC.main.CaveMC;
- public class PromoteCMD implements CommandExecutor {
- @Override
- public boolean onCommand(CommandSender cs, Command cmd, String label, String[] args) {
- if(cmd.getName().equalsIgnoreCase("promote")) {
- if(cs instanceof Player){
- Player p = (Player) cs;
- if(Ranks.getRank(p).equalsIgnoreCase("Admin")) {
- if(args.length == 1) {
- Player target = Bukkit.getPlayerExact(args[0]);
- Ranks.promote(target);
- } else {
- p.sendMessage(CaveMC.prefix + "Bitte verwende §6/promote <Player>");
- }
- } else {
- p.sendMessage(CaveMC.prefix + "Dafür benötigst du den Rang §6Admin");
- }
- } else {
- cs.sendMessage(CaveMC.ERROR.NO_PLAYER);
- }
- }
- return true;
- }
- }
Die angegebenen Strings als Prefix, bzw. Message sind hier aufzufinden:
- Code: Alles auswählen
- public static final String prefix = "§9§lCaveMC §7§l» §3";
- public static final String prefix_MySQL = "§3MySQL §6» §3";
- public class ERROR {
- public static final String NO_PERMISSIONS = CaveMC.prefix + "§cDas darfst du nicht!";
- public static final String NO_PLAYER = CaveMC.prefix + "§cDu bist kein Spieler!";
- }
- public class MySQLMessages {
- public static final String NO_CONNECTION = "§c[§4§l!§c] " + CaveMC.prefix_MySQL + "Keine Verbindung zu MySQL-Servern!";
- public static final String CONNECTION_OPENED = "§a[§2§l!§a] " + CaveMC.prefix_MySQL + "Verbindung zu MySQL-Servern aufgebaut!";
- public static final String CONNECTION_UNAVAILABLE = "§c[§4§l!§c] " + CaveMC.prefix_MySQL + "MySQL-Server unerreichbar!";
- }
Das war es auch schon von 'Promoted!'
Mit freundlichen Grüßen,
ilouHD