First of all, I'm new to these forums, so I'm sorry if (or when) I make a tiny mistake somewhere.
After having learned HTML and CSS a while ago, I recently started learning Java. I'm a developer at a Minecraft server network, and one of the plugins I made is one that enables /color [color code or color name].
Now, I've set up a MySQL database in which I created a table with UUID and Color as variables. I've been struggling to let the plugin connect to the database and store/retrieve the color of the player's name he chose, because it needs to work across multiple servers.
I'd like the plugin to be optimised, so it only connects if needed and disconnects with the SQL database so it doesn't give too much lag. This is the code I have till now:
package nl.live.partyblaze.pbcolor;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
public final class PBColor extends JavaPlugin
{
@Override
public void onEnable()
{
getLogger().info("[PBColor] onEnable has been invoked!");
}
@Override
public void onDisable()
{
getLogger().info("[PBColor] onDisable has been invoked!");
}
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)
{
if (cmd.getName().equalsIgnoreCase("color"))
{
if (args.length == 1)
{
if (args[0].equalsIgnoreCase("a"))
{
String displ = sender.getName();
Player p = (Player) sender;
p.setDisplayName(ChatColor.GREEN + displ);
sender.sendMessage("§aYour name has been set to green!");
return true;
}
if (args[0].equalsIgnoreCase("green"))
{
String displ = sender.getName();
Player p = (Player) sender;
p.setDisplayName(ChatColor.GREEN + displ);
sender.sendMessage("§aYour name has been set to green!");
return true;
}
if (args[0].equalsIgnoreCase("b"))
{
String displ = sender.getName();
Player p = (Player) sender;
p.setDisplayName(ChatColor.AQUA + displ);
sender.sendMessage("§bYour name has been set to aqua!");
return true;
}
if (args[0].equalsIgnoreCase("aqua"))
{
String displ = sender.getName();
Player p = (Player) sender;
p.setDisplayName(ChatColor.AQUA + displ);
sender.sendMessage("§bYour name has been set to aqua!");
return true;
}
if (args[0].equalsIgnoreCase("c"))
{
String displ = sender.getName();
Player p = (Player) sender;
p.setDisplayName(ChatColor.RED + displ);
sender.sendMessage("§cYour name has been set to red!");
return true;
}
if (args[0].equalsIgnoreCase("red"))
{
String displ = sender.getName();
Player p = (Player) sender;
p.setDisplayName(ChatColor.RED + displ);
sender.sendMessage("§cYour name has been set to red!");
return true;
}
if (args[0].equalsIgnoreCase("d"))
{
String displ = sender.getName();
Player p = (Player) sender;
p.setDisplayName(ChatColor.LIGHT_PURPLE + displ);
sender.sendMessage("§dYour name has been set to light purple!");
return true;
}
if (args[0].equalsIgnoreCase("lightpurple"))
{
String displ = sender.getName();
Player p = (Player) sender;
p.setDisplayName(ChatColor.LIGHT_PURPLE + displ);
sender.sendMessage("§dYour name has been set to light purple!");
return true;
}
if (args[0].equalsIgnoreCase("e"))
{
String displ = sender.getName();
Player p = (Player) sender;
p.setDisplayName(ChatColor.YELLOW + displ);
sender.sendMessage("§eYour name has been set to yellow!");
return true;
}
if (args[0].equalsIgnoreCase("yellow"))
{
String displ = sender.getName();
Player p = (Player) sender;
p.setDisplayName(ChatColor.YELLOW + displ);
sender.sendMessage("§eYour name has been set to yellow!");
return true;
}
if (args[0].equalsIgnoreCase("f"))
{
String displ = sender.getName();
Player p = (Player) sender;
p.setDisplayName(ChatColor.WHITE + displ);
sender.sendMessage("§fYour name has been set to white!");
return true;
}
if (args[0].equalsIgnoreCase("white"))
{
String displ = sender.getName();
Player p = (Player) sender;
p.setDisplayName(ChatColor.WHITE + displ);
sender.sendMessage("§fYour name has been set to white!");
return true;
}
if (args[0].equalsIgnoreCase("1"))
{
String displ = sender.getName();
Player p = (Player) sender;
p.setDisplayName(ChatColor.DARK_BLUE + displ);
sender.sendMessage("§1Your name has been set to dark blue!");
return true;
}
if (args[0].equalsIgnoreCase("darkblue"))
{
String displ = sender.getName();
Player p = (Player) sender;
p.setDisplayName(ChatColor.DARK_BLUE + displ);
sender.sendMessage("§1Your name has been set to dark blue!");
return true;
}
if (args[0].equalsIgnoreCase("2"))
{
String displ = sender.getName();
Player p = (Player) sender;
p.setDisplayName(ChatColor.DARK_GREEN + displ);
sender.sendMessage("§2Your name has been set to dark green!");
return true;
}
if (args[0].equalsIgnoreCase("darkgreen"))
{
String displ = sender.getName();
Player p = (Player) sender;
p.setDisplayName(ChatColor.DARK_GREEN + displ);
sender.sendMessage("§2Your name has been set to dark green!");
return true;
}
if (args[0].equalsIgnoreCase("3"))
{
String displ = sender.getName();
Player p = (Player) sender;
p.setDisplayName(ChatColor.DARK_AQUA + displ);
sender.sendMessage("§3Your name has been set to dark aqua!");
return true;
}
if (args[0].equalsIgnoreCase("darkaqua"))
{
String displ = sender.getName();
Player p = (Player) sender;
p.setDisplayName(ChatColor.DARK_AQUA + displ);
sender.sendMessage("§3Your name has been set to dark aqua!");
return true;
}
if (args[0].equalsIgnoreCase("4"))
{
String displ = sender.getName();
Player p = (Player) sender;
p.setDisplayName(ChatColor.DARK_RED + displ);
sender.sendMessage("§4Your name has been set to dark red!");
return true;
}
if (args[0].equalsIgnoreCase("darkred"))
{
String displ = sender.getName();
Player p = (Player) sender;
p.setDisplayName(ChatColor.DARK_RED + displ);
sender.sendMessage("§4Your name has been set to dark red!");
return true;
}
if (args[0].equalsIgnoreCase("5"))
{
String displ = sender.getName();
Player p = (Player) sender;
p.setDisplayName(ChatColor.DARK_PURPLE + displ);
sender.sendMessage("§5Your name has been set to dark purple!");
return true;
}
if (args[0].equalsIgnoreCase("darkpurple"))
{
String displ = sender.getName();
Player p = (Player) sender;
p.setDisplayName(ChatColor.DARK_PURPLE + displ);
sender.sendMessage("§5Your name has been set to dark purple!");
return true;
}
if (args[0].equalsIgnoreCase("6"))
{
String displ = sender.getName();
Player p = (Player) sender;
p.setDisplayName(ChatColor.GOLD + displ);
sender.sendMessage("§6Your name has been set to gold!");
return true;
}
if (args[0].equalsIgnoreCase("gold"))
{
String displ = sender.getName();
Player p = (Player) sender;
p.setDisplayName(ChatColor.GOLD + displ);
sender.sendMessage("§6Your name has been set to gold!");
return true;
}
if (args[0].equalsIgnoreCase("7"))
{
String displ = sender.getName();
Player p = (Player) sender;
p.setDisplayName(ChatColor.GRAY + displ);
sender.sendMessage("§7Your name has been set to gray!");
return true;
}
if (args[0].equalsIgnoreCase("gray"))
{
String displ = sender.getName();
Player p = (Player) sender;
p.setDisplayName(ChatColor.GRAY + displ);
sender.sendMessage("§7Your name has been set to gray!");
return true;
}
if (args[0].equalsIgnoreCase("8"))
{
String displ = sender.getName();
Player p = (Player) sender;
p.setDisplayName(ChatColor.DARK_GRAY + displ);
sender.sendMessage("§8Your name has been set to dark gray!");
return true;
}
if (args[0].equalsIgnoreCase("darkgray"))
{
String displ = sender.getName();
Player p = (Player) sender;
p.setDisplayName(ChatColor.DARK_GRAY + displ);
sender.sendMessage("§8Your name has been set to dark gray!");
return true;
}
if (args[0].equalsIgnoreCase("9"))
{
String displ = sender.getName();
Player p = (Player) sender;
p.setDisplayName(ChatColor.BLUE + displ);
sender.sendMessage("§9Your name has been set to blue!");
return true;
}
if (args[0].equalsIgnoreCase("blue"))
{
String displ = sender.getName();
Player p = (Player) sender;
p.setDisplayName(ChatColor.BLUE + displ);
sender.sendMessage("§9Your name has been set to blue!");
return true;
}
}
}
return false;
}
}
Thanks in advance!
In my plugin, I use this Class, which I named MySQL
:
package me.Nightfighter001.Minepedia-System.Methoden;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import org.bukkit.Bukkit;
import org.bukkit.command.ConsoleCommandSender;
public class MySQL {
public static String host = "minepedia.eu";
public static String port = "3306";
public static String database = "GlobalData";
public static String username = "******";
public static String password = "*****";
public static Connection con;
static ConsoleCommandSender console = Bukkit.getConsoleSender();
// connect
public static void connect() {
if (!isConnected()) {
try {
con = DriverManager.getConnection("jdbc:mysql://" + host + ":" + port + "/" + database, username, password);
console.sendMessage("\247c[\2476Minepedia-System\247c] \247bMySQL-Verbindung wurde aufgebaut!");
} catch (SQLException e) {
e.printStackTrace();
}
}
}
// disconnect
public static void disconnect() {
if (isConnected()) {
try {
con.close();
console.sendMessage("\247c[\2476Minepedia-System\247c]\247bMySQL-Verbindung wurde geschlossen!");
} catch (SQLException e) {
e.printStackTrace();
}
}
}
// isConnected
public static boolean isConnected() {
return (con == null ? false : true);
}
// getConnection
public static Connection getConnection() {
return con;
}
}
In onEnable()
you should call MySQL.connect();
and then in onDisable()
call MySQL.disconnect();
. This will properly connect and disconnect the MySQL instance.
This code is written with the assumption you indent to run this on Bukkit/Spigot, to run it in BungeeCord instead, you should replace the CommandSender
with the BungeeCord equivalent.
Some examples for PreparedStatements
:
Creating a Table
:
PreparedStatement ps = MySQL.getConnection().prepareStatement("CREATE TABLE IF NOT EXISTS Players (Name VARCHAR(100),UUID VARCHAR(100),Coins INT(100),PRIMARY KEY (Name))");
ps.executeUpdate();
PRIMARY KEY
means, that Name
can not be duplicated.
VARCHAR
is nearly the same as a String
.
Empty a Table
:
PreparedStatement ps = MySQL.getConnection().prepareStatement("TRUNCATE Players");
ps.executeUpdate();
Insert something to a Table
:
PreparedStatement ps = MySQL.getConnection().prepareStatement("INSERT IGNORE INTO Players (Name,UUID,Coins) VALUES (?,?,?)");
ps.setString(1, Player.getName());
ps.setString(2, Player.getUniqueId());
ps.setInt(3, 10);
ps.executeUpdate();
With setString()
/ setInt()
, I replace the Questionmark.
Delete something from Table
:
PreparedStatement ps = MySQL.getConnection().prepareStatement("DELETE FROM Players WHERE Name = ?");
ps.setString(1, Player.getName());
ps.executeUpdate();
Read from Table
:
PreparedStatement ps = MySQL.getConnection().prepareStatement("SELECT Coins FROM Players WHERE Name = ?");
ps.setString(1, Player.getName());
ResultSet rs = ps.executeQuery();
int coins = 0;
if (rs.next() == true) {
coins = rs.getInt("Coins");
}
If you want to get everything from Players
where the Name
equals Player.getName()
, you can use *
in place of Coins
.
I hope this helps. And sorry for my bad English again.