package net.scapeemulator.game.io.jdbc;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import net.scapeemulator.game.model.player.Player;
import net.scapeemulator.game.model.player.PlayerSettings;
public final class SettingsTable extends Table<Player> {
private final PreparedStatement loadStatement;
private final PreparedStatement saveStatement;
public SettingsTable(Connection connection) throws SQLException {
this.loadStatement = connection.prepareStatement("SELECT * FROM settings WHERE player_id = ?;");
this.saveStatement = connection.prepareStatement("INSERT INTO settings (player_id, setting, value) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE value = VALUES(value);");
}
@Override
public void load(Player player) throws SQLException, IOException {
loadStatement.setInt(1, player.getDatabaseId());
PlayerSettings settings = player.getSettings();
try (ResultSet set = loadStatement.executeQuery()) {
while (set.next()) {
String setting = set.getString("setting");
int value = set.getInt("value");
switch (setting) {
case "attack_style":
settings.setAttackStyle(value);
break;
case "auto_retaliating":
settings.setAutoRetaliating(value != 0);
break;
case "two_button_mouse":
settings.setTwoButtonMouse(value != 0);
break;
case "chat_fancy":
settings.setChatFancy(value != 0);
break;
case "private_chat_split":
settings.setPrivateChatSplit(value != 0);
break;
case "accepting_aid":
settings.setAcceptingAid(value != 0);
break;
case "running":
settings.setRunning(value != 0);
break;
case "public_chat":
player.getSettings().setPublicChat(value, false);
break;
case "private_chat":
player.getSettings().setPrivateChat(value, false);
break;
case "trade_requests":
player.getSettings().setTradeRequests(value, false);
break;
case "bank_x":
player.getBankSettings().setLastX(value);
break;
default:
throw new IOException("unknown setting: " + setting);
}
}
}
}
@Override
public void save(Player player) throws SQLException, IOException {
saveStatement.setInt(1, player.getDatabaseId());
PlayerSettings settings = player.getSettings();
saveStatement.setString(2, "attack_style");
saveStatement.setInt(3, settings.getAttackStyle());
saveStatement.addBatch();
saveStatement.setString(2, "auto_retaliating");
saveStatement.setInt(3, settings.isAutoRetaliating() ? 1 : 0);
saveStatement.addBatch();
saveStatement.setString(2, "two_button_mouse");
saveStatement.setInt(3, settings.isTwoButtonMouse() ? 1 : 0);
saveStatement.addBatch();
saveStatement.setString(2, "chat_fancy");
saveStatement.setInt(3, settings.isChatFancy() ? 1 : 0);
saveStatement.addBatch();
saveStatement.setString(2, "private_chat_split");
saveStatement.setInt(3, settings.isPrivateChatSplit() ? 1 : 0);
saveStatement.addBatch();
saveStatement.setString(2, "accepting_aid");
saveStatement.setInt(3, settings.isAcceptingAid() ? 1 : 0);
saveStatement.addBatch();
saveStatement.setString(2, "running");
saveStatement.setInt(3, settings.isRunning() ? 1 : 0);
saveStatement.addBatch();
saveStatement.setString(2, "public_chat");
saveStatement.setInt(3, player.getSettings().getPublicChat());
saveStatement.addBatch();
saveStatement.setString(2, "private_chat");
saveStatement.setInt(3, player.getSettings().getPrivateChat());
saveStatement.addBatch();
saveStatement.setString(2, "trade_requests");
saveStatement.setInt(3, player.getSettings().getTradeRequests());
saveStatement.addBatch();
saveStatement.setString(2, "bank_x");
saveStatement.setInt(3, player.getBankSettings().getLastX());
saveStatement.addBatch();
saveStatement.executeBatch();
}
}