1
저는 join시 stats 플러그인을 코딩하고 해시 맵으로 구현하고 종료 할 때 데이터베이스에 새로운 stats를 구현합니다. 그 이유는 매 초마다 연결을 여는 것과 같은 지연이 없기 때문입니다.내 콘솔에서 코드에서 약간의 오류가 발생했습니다.
이것이 의미하는 바라면 MariaDB를 사용하고 있습니다. java.sql.SQLException의 :
@EventHandler
public void onDeath(PlayerDeathEvent event){
Player p = event.getEntity();
Player k = p.getKiller();
kills.put(k.getName(), kills.get(k.getName() + 1));
deaths.put(p.getName(), deaths.get(p.getName() + 1));
removeScoreboard(p);
setScoreboard(p);
removeScoreboard(k);
setScoreboard(k);
}
@EventHandler
public void onJoin(PlayerJoinEvent e){
OfflinePlayer p2 = e.getPlayer();
Player p = e.getPlayer();
openConnection();
try{
int previousDeaths = 0;
int previousKills = 0;
if(playerDataContainsPlayer(p)){
PreparedStatement sql = connection.prepareStatement("SELECT deaths FROM `player_data` WHERE player=?;");
PreparedStatement sql2 = connection.prepareStatement("SELECT kills FROM `player_data` WHERE player=?;");
ResultSet result = sql.executeQuery();
ResultSet result2 = sql2.executeQuery();
result2.next();
result.next();
previousDeaths = result.getInt("deaths");
previousKills = result2.getInt("kills");
kills.put(p.getName(), previousKills);
deaths.put(p.getName(), previousDeaths);
sql.close();
sql2.close();
result.close();
result2.close();
removeScoreboard(p);
setScoreboard(p);
} else {
PreparedStatement newPlayer = connection.prepareStatement("INSERT INTO `player_data` values(?,0,0);");
newPlayer.setString(1, p.getUniqueId().toString());
newPlayer.setInt(2, 0);
newPlayer.setInt(3, 0);
newPlayer.execute();
newPlayer.close();
kills.put(p.getName(), 0);
deaths.put(p.getName(), 0);
removeScoreboard(p);
setScoreboard(p);
}
}catch(Exception e1){
e1.printStackTrace();
} finally{
closeConnection();
}
}
@EventHandler
public void onLeave(PlayerQuitEvent e){
Player p = e.getPlayer();
openConnection();
try{
int previousDeaths = 0;
int previousKills = 0;
if(playerDataContainsPlayer(p)){
PreparedStatement sql = connection.prepareStatement("SELECT deaths FROM `player_data` WHERE player=?;");
PreparedStatement sql2 = connection.prepareStatement("SELECT kills FROM `player_data` WHERE player=?;");
sql.setString(1, p.getUniqueId().toString());
sql2.setString(1, p.getUniqueId().toString());
ResultSet result = sql.executeQuery();
ResultSet result2 = sql2.executeQuery();
result2.next();
result.next();
previousDeaths = result.getInt("deaths");
previousKills = result2.getInt("kills");
PreparedStatement killsUpdate = connection.prepareStatement("UPDATE `player_data` SET kills=? WHERE player=?;");
killsUpdate.setInt(1, kills.get(p.getName()));
killsUpdate.setString(2, p.getUniqueId().toString());
killsUpdate.executeUpdate();
PreparedStatement deathsUpdate = connection.prepareStatement("UPDATE `player_data` SET deaths=? WHERE player=?;");
deathsUpdate.setInt(1, deaths.get(p.getName()));
deathsUpdate.setString(2, p.getUniqueId().toString());
deathsUpdate.executeUpdate();
deathsUpdate.close();
killsUpdate.close();
sql.close();
sql2.close();
result.close();
result2.close();
}
}catch(Exception e1){
e1.printStackTrace();
} finally{
closeConnection();
}
}
아래
public static HashMap<String, Integer> kills = new HashMap<String, Integer>();
public static HashMap<String, Integer> deaths = new HashMap<String, Integer>();
코드 아래
가 HashMaps을 당신이 가입 할 때마다, 그것이 말하는 [20시 51분 43초는 WARN 없다]를 매개 변수 1
에 대해 지정되지 값을누군가를 죽이거나 죽을 때마다 당신의 죽음은 무효가되어 사망자는 null이됩니다. 왜 이런 일이 일어나고 있는지 모르겠다. 어떤 도움을 주셔서 감사합니다.
을 다음과 같이
Pls는 설정 해시 맵의 값과 HashMaps을이 작동하지 않는 이유를 알 수 있습니까 : 두 번째 질문에 대해 https://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html
:
이를 참조하십시오? – Awaken
또한 Join에 Integers를 설정하지 않고 정수를 검색하여 Leave에 저장하려고합니다. – Awaken
hashmap의 문제점은 무엇입니까? –