Bonjour,
J'ai récemment retravaillé un plugin spigot que je suis en train de créer. J'ai pour l'instant un problème, je n'arrive pas à communiquer avec ma base de données.
Main.java
SQLConnection.java
Je cherche d'où viens le problème depuis longtemps, j'aimerais donc savoir si quelqu'un a une idée pour régler le problème. Voici le code d'erreur:
J'ai récemment retravaillé un plugin spigot que je suis en train de créer. J'ai pour l'instant un problème, je n'arrive pas à communiquer avec ma base de données.
Main.java
Code:
package eu.heroria.iceorange92;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerKickEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.permissions.PermissionAttachment;
import org.bukkit.plugin.java.JavaPlugin;
import eu.heroria.iceorange92.Npc.NpcListener;
import eu.heroria.iceorange92.data.Rank;
import eu.heroria.iceorange92.data.PlayerData;
import eu.heroria.iceorange92.data.PlayerDataManager;
import eu.heroria.iceorange92.data.PlayerXpManager;
import eu.heroria.iceorange92.data.SqlConnection;
public class Main extends JavaPlugin implements Listener {
public SqlConnection sql;
public PlayerDataManager dataManager = new PlayerDataManager(this);
public Map<Player, PlayerData> dataPlayers = new HashMap<>();
public Map<UUID, PermissionAttachment> playerPermission = new HashMap<>();
public void onEnable() {
sql = new SqlConnection(this, "jdbc:mysql://", "localhost", "heroria", "root", "");
getServer().getPluginManager().registerEvents(new PlayerXpManager(this), this);
getServer().getPluginManager().registerEvents(new NpcListener(this), this);
getServer().getPluginManager().registerEvents(sql, this);
getServer().getPluginManager().registerEvents(this, this);
}
public void onDisable() {
for (Player all : Bukkit.getServer().getOnlinePlayers()){
all.kickPlayer(Bukkit.getShutdownMessage());
}
sql.disconnect();
}
@EventHandler
public void onJoin(PlayerJoinEvent event) {
Player player = (Player)event.getPlayer();
sql.createAccount(player);
dataManager.loadPlayerData(player);
}
@EventHandler
public void onQuit(PlayerQuitEvent event) {
Player player = (Player)event.getPlayer();
dataManager.savePlayerData(player);
}
@EventHandler
public void onKick(PlayerKickEvent event) {
Player player = (Player)event.getPlayer();
dataManager.savePlayerData(player);
}
public void setupPermissions(Player player) {
PermissionAttachment attachment = player.addAttachment(this);
this.playerPermission.put(player.getUniqueId(), attachment);
permissionSetter(player, player.getUniqueId());
}
private void permissionSetter(Player player, UUID uuid) {
PermissionAttachment attachment = this.playerPermission.get(uuid);
Rank rank = sql.getRank(player);
switch(rank) {
case VIP:
attachment.setPermission("minecraft.command.me", true);
break;
case MODO:
attachment.setPermission("minecraft.command.kill", true);
break;
case CM:
attachment.setPermission("minecraft.command.*", true);
attachment.setPermission("worldedit.selection.pos", true);
attachment.setPermission("worldedit.*", true);
break;
case DEV:
attachment.setPermission("worldedit.*", true);
attachment.setPermission("minecraft.command.*", true);
attachment.setPermission("worldguard.*", true);
attachment.setPermission("bukkit.command.restart", true);
break;
case ADMIN:
attachment.setPermission("*", true);
break;
default:
attachment.setPermission("admintools.player", true);
break;
}
}
}
SQLConnection.java
Code:
package eu.heroria.iceorange92.data;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import eu.heroria.iceorange92.Main;
import eu.heroria.iceorange92.data.PlayerData;
import eu.heroria.iceorange92.data.Rank;
public class SqlConnection implements Listener {
private Connection connection;
private Main pl;
private String urlbase, host, database, user, pass;
public SqlConnection(Main pl, String urlbase, String host, String database, String user, String pass) {
this.pl = pl;
this.urlbase = urlbase;
this.host = host;
this.database = database;
this.user = user;
this.pass = pass;
}
public void connection() {
if(!isConnected()) {
try {
connection = DriverManager.getConnection(urlbase + host + "/" + database, user, pass);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public void disconnect() {
if(isConnected()) {
try {
connection.close();
System.out.println("HeroriaCore is disconnected.");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public boolean isConnected() {
return connection != null;
}
public void createAccount(Player player) {
if(!hasAccount(player)) {
//INSERT
try {
PreparedStatement q = connection.prepareStatement("INSERT INTO players(uuid,balance,rank,faction,xp,reputation) VALUES (?,?,?,?,?,?)");
q.setString(1, player.getUniqueId().toString());
q.setInt(2, 100);
q.setInt(3, Rank.JOUEUR.getPower());
q.setInt(4, 0);
q.setInt(5, 1);
q.setInt(6, 100);
q.execute();
q.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public boolean hasAccount(Player player) {
try {
PreparedStatement q = connection.prepareStatement("SELECT uuid FROM players WHERE uuid = ?");
q.setString(1, player.getUniqueId().toString());
ResultSet resultat = q.executeQuery();
boolean hasAccount = resultat.next();
q.close();
return hasAccount;
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
public int getBalance(Player player) {
//SELECT
if(pl.dataPlayers.containsKey(player)) {
PlayerData playerData = pl.dataPlayers.get(player);
return playerData.getBalance();
}
return 0;
}
public int getFaction(Player player) {
if(pl.dataPlayers.containsKey(player)) {
PlayerData playerData = pl.dataPlayers.get(player);
return playerData.getFaction();
}
return 0;
}
public void setFaction(Player player, int faction) {
if(pl.dataPlayers.containsKey(player)) {
PlayerData playerData = pl.dataPlayers.get(player);
playerData.setFaction(faction);
pl.dataPlayers.remove(player);
pl.dataPlayers.put(player, playerData);
}
}
public int getXp(Player player) {
if(pl.dataPlayers.containsKey(player)) {
PlayerData playerData = pl.dataPlayers.get(player);
return playerData.getXp();
}
return 0;
}
public void setXp(Player player, int xp) {
if(pl.dataPlayers.containsKey(player)) {
PlayerData playerData = pl.dataPlayers.get(player);
playerData.setFaction(xp);
pl.dataPlayers.remove(player);
pl.dataPlayers.put(player, playerData);
}
}
public int getReputation(Player player) {
if(pl.dataPlayers.containsKey(player)) {
PlayerData playerData = pl.dataPlayers.get(player);
return playerData.getReputation();
}
return 0;
}
public void setReputation(Player player, int reputation) {
if(pl.dataPlayers.containsKey(player)) {
PlayerData playerData = pl.dataPlayers.get(player);
playerData.setFaction(reputation);
pl.dataPlayers.remove(player);
pl.dataPlayers.put(player, playerData);
}
}
public void setMoney(Player player, int amount) {
if(pl.dataPlayers.containsKey(player));{
PlayerData playerData = pl.dataPlayers.get(player);
playerData.setBalance(amount);
pl.dataPlayers.remove(player);
pl.dataPlayers.put(player, playerData);
}
}
public void addMoney(Player player, int amount) {
if(pl.dataPlayers.containsKey(player)) {
PlayerData playerData = pl.dataPlayers.get(player);
int balance = playerData.getBalance();
int newBalance = balance + amount;
playerData.setBalance(newBalance);
pl.dataPlayers.remove(player);
pl.dataPlayers.put(player, playerData);
}
}
public boolean removeMoney(Player player, int amount) {
if(pl.dataPlayers.containsKey(player)) {
PlayerData playerData = pl.dataPlayers.get(player);
int balance = playerData.getBalance();
if(balance < amount) {
player.sendMessage("§4[Heroria]Désolé, vous n'avez pas assez d'argent pour effectuer cette transaction. On se fait un calin ?");
return true;
}
int newBalance = balance - amount;
playerData.setBalance(newBalance);
pl.dataPlayers.remove(player);
pl.dataPlayers.put(player, playerData);
}
return false;
}
public void setRank(Player player, Rank rank) {
if(pl.dataPlayers.containsKey(player)) {
PlayerData playerData = pl.dataPlayers.get(player);
playerData.setRank(rank);
pl.dataPlayers.remove(player);
pl.dataPlayers.put(player, playerData);
}
}
public Rank getRank(Player player) {
if(pl.dataPlayers.containsKey(player)) {
PlayerData playerData = pl.dataPlayers.get(player);
return playerData.getRank();
}
return Rank.JOUEUR;
}
public PlayerData createPlayerData(Player player) {
if(!pl.dataPlayers.containsKey(player)) {
try {
PreparedStatement rs = connection.prepareStatement("SELECT balance, rank, faction, reputation FROM players WHERE uuid = ?");
rs.setString(1, player.getUniqueId().toString());
ResultSet resultats = rs.executeQuery();
int balance = 0;
int faction = 0;
int xp = 1;
int reputation = 100;
Rank rank = Rank.JOUEUR;
while(resultats.next()) {
faction = resultats.getInt("faction");
balance = resultats.getInt("balance");
xp = resultats.getInt("xp");
reputation = resultats.getInt("reputation");
rank = Rank.powerToRank(resultats.getInt("rank"));
}
PlayerData playerData = new PlayerData();
playerData.setBalance(balance);
playerData.setRank(rank);
playerData.setFaction(faction);
playerData.setReputation(reputation);
playerData.setXp(xp);
rs.close();
return playerData;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return new PlayerData();
}
}
return null;
}
public void updatePlayerData(Player player) {
if(pl.dataPlayers.containsKey(player)) {
PlayerData playerData = pl.dataPlayers.get(player);
int balance = playerData.getBalance();
Rank rank = playerData.getRank();
int power = rank.getPower();
int faction = playerData.getFaction();
int xp = playerData.getXp();
int reputation = playerData.getReputation();
PreparedStatement q;
try {
q = connection.prepareStatement("UPDATE players SET rank = ?, balance = ?, faction = ?, xp = ?, reputation = ? WHERE uuid = ?");
q.setInt(1, power);
q.setInt(2, balance);
q.setInt(3, faction);
q.setInt(4, xp);
q.setInt(5, reputation);
q.setString(6, player.getUniqueId().toString());
q.executeUpdate();
q.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public Connection getConnection() {
return connection;
}
}
Je cherche d'où viens le problème depuis longtemps, j'aimerais donc savoir si quelqu'un a une idée pour régler le problème. Voici le code d'erreur:
Code:
[10:15:40] [Server thread/ERROR]: Could not pass event PlayerJoinEvent to HeroriaCore v1.1
org.bukkit.event.EventException: null
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot-1.12.2.jar:git-Spigot-4bd94dc-bdcc7c7]
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot-1.12.2.jar:git-Spigot-4bd94dc-bdcc7c7]
at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:500) [spigot-1.12.2.jar:git-Spigot-4bd94dc-bdcc7c7]
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:485) [spigot-1.12.2.jar:git-Spigot-4bd94dc-bdcc7c7]
at net.minecraft.server.v1_12_R1.PlayerList.onPlayerJoin(PlayerList.java:346) [spigot-1.12.2.jar:git-Spigot-4bd94dc-bdcc7c7]
at net.minecraft.server.v1_12_R1.PlayerList.a(PlayerList.java:166) [spigot-1.12.2.jar:git-Spigot-4bd94dc-bdcc7c7]
at net.minecraft.server.v1_12_R1.LoginListener.b(LoginListener.java:159) [spigot-1.12.2.jar:git-Spigot-4bd94dc-bdcc7c7]
at net.minecraft.server.v1_12_R1.LoginListener.e(LoginListener.java:57) [spigot-1.12.2.jar:git-Spigot-4bd94dc-bdcc7c7]
at net.minecraft.server.v1_12_R1.NetworkManager.a(NetworkManager.java:233) [spigot-1.12.2.jar:git-Spigot-4bd94dc-bdcc7c7]
at net.minecraft.server.v1_12_R1.ServerConnection.c(ServerConnection.java:140) [spigot-1.12.2.jar:git-Spigot-4bd94dc-bdcc7c7]
at net.minecraft.server.v1_12_R1.MinecraftServer.D(MinecraftServer.java:845) [spigot-1.12.2.jar:git-Spigot-4bd94dc-bdcc7c7]
at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:406) [spigot-1.12.2.jar:git-Spigot-4bd94dc-bdcc7c7]
at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:679) [spigot-1.12.2.jar:git-Spigot-4bd94dc-bdcc7c7]
at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:577) [spigot-1.12.2.jar:git-Spigot-4bd94dc-bdcc7c7]
at java.lang.Thread.run(Unknown Source) [?:1.8.0_191]
Caused by: java.lang.NullPointerException
at eu.heroria.iceorange92.data.SqlConnection.hasAccount(SqlConnection.java:83) ~[?:?]
at eu.heroria.iceorange92.data.SqlConnection.createAccount(SqlConnection.java:59) ~[?:?]
at eu.heroria.iceorange92.Main.onJoin(Main.java:49) ~[?:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_191]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_191]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.8.0_191]
at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.8.0_191]
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:302) ~[spigot-1.12.2.jar:git-Spigot-4bd94dc-bdcc7c7]
... 14 more