refactor: use try-with-resources for item information db operations

This commit is contained in:
P0nk
2021-04-04 22:43:06 +02:00
parent de14c5782d
commit 50b76bf2ec

View File

@@ -21,55 +21,29 @@
*/ */
package server; package server;
import java.io.File; import client.*;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.HashSet;
import config.YamlConfig;
import net.server.Server;
import provider.MapleData;
import provider.MapleDataDirectoryEntry;
import provider.MapleDataFileEntry;
import provider.MapleDataProvider;
import provider.MapleDataProviderFactory;
import provider.MapleDataTool;
import tools.DatabaseConnection;
import tools.FilePrinter;
import tools.MaplePacketCreator;
import tools.Pair;
import tools.Randomizer;
import client.MapleCharacter;
import client.MapleClient;
import client.MapleJob;
import client.Skill;
import client.SkillFactory;
import client.autoban.AutobanFactory; import client.autoban.AutobanFactory;
import client.inventory.Equip; import client.inventory.*;
import client.inventory.Item; import config.YamlConfig;
import client.inventory.MapleInventory;
import client.inventory.MapleInventoryType;
import client.inventory.MapleWeaponType;
import constants.inventory.EquipSlot; import constants.inventory.EquipSlot;
import constants.inventory.ItemConstants; import constants.inventory.ItemConstants;
import constants.skills.Assassin; import constants.skills.Assassin;
import constants.skills.Gunslinger; import constants.skills.Gunslinger;
import constants.skills.NightWalker; import constants.skills.NightWalker;
import java.sql.Connection; import net.server.Server;
import provider.*;
import server.MakerItemFactory.MakerItemCreateEntry; import server.MakerItemFactory.MakerItemCreateEntry;
import server.life.MapleMonsterInformationProvider;
import server.life.MapleLifeFactory; import server.life.MapleLifeFactory;
import tools.StringUtil; import server.life.MapleMonsterInformationProvider;
import tools.*;
import java.io.File;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;
import java.util.Map.Entry;
/** /**
* *
@@ -1407,35 +1381,14 @@ public class MapleItemInformationProvider {
} }
private void loadCardIdData() { private void loadCardIdData() {
PreparedStatement ps = null; try (Connection con = DatabaseConnection.getConnection();
ResultSet rs = null; PreparedStatement ps = con.prepareStatement("SELECT cardid, mobid FROM monstercarddata");
Connection con = null; ResultSet rs = ps.executeQuery()) {
try {
con = DatabaseConnection.getConnection();
ps = con.prepareStatement("SELECT cardid, mobid FROM monstercarddata");
rs = ps.executeQuery();
while (rs.next()) { while (rs.next()) {
monsterBookID.put(rs.getInt(1), rs.getInt(2)); monsterBookID.put(rs.getInt(1), rs.getInt(2));
} }
rs.close();
ps.close();
con.close();
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); e.printStackTrace();
} finally {
try {
if (rs != null && !rs.isClosed()) {
rs.close();
}
if (ps != null && !ps.isClosed()) {
ps.close();
}
if (con != null && !con.isClosed()) {
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
} }
} }
@@ -1915,25 +1868,25 @@ public class MapleItemInformationProvider {
public Pair<String, Integer> getMakerReagentStatUpgrade(int itemId) { public Pair<String, Integer> getMakerReagentStatUpgrade(int itemId) {
try { try {
Pair<String, Integer> statUpgd = statUpgradeMakerCache.get(itemId); Pair<String, Integer> statUpgd = statUpgradeMakerCache.get(itemId);
if(statUpgd != null) { if (statUpgd != null) {
return statUpgd; return statUpgd;
} else if(statUpgradeMakerCache.containsKey(itemId)) { } else if (statUpgradeMakerCache.containsKey(itemId)) {
return null; return null;
} }
Connection con = DatabaseConnection.getConnection(); try (Connection con = DatabaseConnection.getConnection();
PreparedStatement ps = con.prepareStatement("SELECT stat, value FROM makerreagentdata WHERE itemid = ?"); PreparedStatement ps = con.prepareStatement("SELECT stat, value FROM makerreagentdata WHERE itemid = ?")) {
ps.setInt(1, itemId); ps.setInt(1, itemId);
ResultSet rs = ps.executeQuery();
if(rs.next()) {
String statType = rs.getString("stat");
int statGain = rs.getInt("value");
statUpgd = new Pair<>(statType, statGain); try (ResultSet rs = ps.executeQuery()) {
if (rs.next()) {
String statType = rs.getString("stat");
int statGain = rs.getInt("value");
statUpgd = new Pair<>(statType, statGain);
}
}
} }
rs.close();
ps.close();
con.close();
statUpgradeMakerCache.put(itemId, statUpgd); statUpgradeMakerCache.put(itemId, statUpgd);
return statUpgd; return statUpgd;
@@ -1946,23 +1899,23 @@ public class MapleItemInformationProvider {
public int getMakerCrystalFromLeftover(Integer leftoverId) { public int getMakerCrystalFromLeftover(Integer leftoverId) {
try { try {
Integer itemid = mobCrystalMakerCache.get(leftoverId); Integer itemid = mobCrystalMakerCache.get(leftoverId);
if(itemid != null) { if (itemid != null) {
return itemid; return itemid;
} }
itemid = -1; itemid = -1;
Connection con = DatabaseConnection.getConnection(); try (Connection con = DatabaseConnection.getConnection();
PreparedStatement ps = con.prepareStatement("SELECT dropperid FROM drop_data WHERE itemid = ? ORDER BY dropperid;"); PreparedStatement ps = con.prepareStatement("SELECT dropperid FROM drop_data WHERE itemid = ? ORDER BY dropperid;")) {
ps.setInt(1, leftoverId); ps.setInt(1, leftoverId);
ResultSet rs = ps.executeQuery();
if(rs.next()) { try (ResultSet rs = ps.executeQuery()) {
int dropperid = rs.getInt("dropperid"); if (rs.next()) {
itemid = getCrystalForLevel(MapleLifeFactory.getMonsterLevel(dropperid) - 1); int dropperid = rs.getInt("dropperid");
itemid = getCrystalForLevel(MapleLifeFactory.getMonsterLevel(dropperid) - 1);
}
}
} }
rs.close();
ps.close();
con.close();
mobCrystalMakerCache.put(leftoverId, itemid); mobCrystalMakerCache.put(leftoverId, itemid);
return itemid; return itemid;
@@ -1979,34 +1932,35 @@ public class MapleItemInformationProvider {
if ((makerEntry = makerItemCache.get(toCreate)) != null) { if ((makerEntry = makerItemCache.get(toCreate)) != null) {
return new MakerItemCreateEntry(makerEntry); return new MakerItemCreateEntry(makerEntry);
} else { } else {
try { try (Connection con = DatabaseConnection.getConnection()) {
Connection con = DatabaseConnection.getConnection();
PreparedStatement ps = con.prepareStatement("SELECT req_level, req_maker_level, req_meso, quantity FROM makercreatedata WHERE itemid = ?");
ps.setInt(1, toCreate);
ResultSet rs = ps.executeQuery();
int reqLevel = -1; int reqLevel = -1;
int reqMakerLevel = -1; int reqMakerLevel = -1;
int cost = -1; int cost = -1;
int toGive = -1; int toGive = -1;
if (rs.next()) { try (PreparedStatement ps = con.prepareStatement("SELECT req_level, req_maker_level, req_meso, quantity FROM makercreatedata WHERE itemid = ?")) {
reqLevel = rs.getInt("req_level"); ps.setInt(1, toCreate);
reqMakerLevel = rs.getInt("req_maker_level"); try (ResultSet rs = ps.executeQuery()) {
cost = rs.getInt("req_meso"); if (rs.next()) {
toGive = rs.getInt("quantity"); reqLevel = rs.getInt("req_level");
reqMakerLevel = rs.getInt("req_maker_level");
cost = rs.getInt("req_meso");
toGive = rs.getInt("quantity");
}
}
} }
ps.close();
rs.close();
makerEntry = new MakerItemCreateEntry(cost, reqLevel, reqMakerLevel); makerEntry = new MakerItemCreateEntry(cost, reqLevel, reqMakerLevel);
makerEntry.addGainItem(toCreate, toGive); makerEntry.addGainItem(toCreate, toGive);
ps = con.prepareStatement("SELECT req_item, count FROM makerrecipedata WHERE itemid = ?");
ps.setInt(1, toCreate); try (PreparedStatement ps = con.prepareStatement("SELECT req_item, count FROM makerrecipedata WHERE itemid = ?")) {
rs = ps.executeQuery(); ps.setInt(1, toCreate);
while (rs.next()) {
makerEntry.addReqItem(rs.getInt("req_item"), rs.getInt("count")); try (ResultSet rs = ps.executeQuery()) {
while (rs.next()) {
makerEntry.addReqItem(rs.getInt("req_item"), rs.getInt("count"));
}
}
} }
rs.close();
ps.close();
con.close();
makerItemCache.put(toCreate, new MakerItemCreateEntry(makerEntry)); makerItemCache.put(toCreate, new MakerItemCreateEntry(makerEntry));
} catch (SQLException sqle) { } catch (SQLException sqle) {
sqle.printStackTrace(); sqle.printStackTrace();
@@ -2039,21 +1993,16 @@ public class MapleItemInformationProvider {
public List<Pair<Integer, Integer>> getMakerDisassembledItems(Integer itemId) { public List<Pair<Integer, Integer>> getMakerDisassembledItems(Integer itemId) {
List<Pair<Integer, Integer>> items = new LinkedList<>(); List<Pair<Integer, Integer>> items = new LinkedList<>();
Connection con; try (Connection con = DatabaseConnection.getConnection();
try { PreparedStatement ps = con.prepareStatement("SELECT req_item, count FROM makerrecipedata WHERE itemid = ? AND req_item >= 4260000 AND req_item < 4270000")) {
con = DatabaseConnection.getConnection();
PreparedStatement ps = con.prepareStatement("SELECT req_item, count FROM makerrecipedata WHERE itemid = ? AND req_item >= 4260000 AND req_item < 4270000");
ps.setInt(1, itemId); ps.setInt(1, itemId);
ResultSet rs = ps.executeQuery();
while (rs.next()) { try (ResultSet rs = ps.executeQuery()) {
items.add(new Pair<>(rs.getInt("req_item"), rs.getInt("count") / 2)); // return to the player half of the crystals needed while (rs.next()) {
items.add(new Pair<>(rs.getInt("req_item"), rs.getInt("count") / 2)); // return to the player half of the crystals needed
}
} }
rs.close();
ps.close();
con.close();
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
@@ -2063,22 +2012,17 @@ public class MapleItemInformationProvider {
public int getMakerDisassembledFee(Integer itemId) { public int getMakerDisassembledFee(Integer itemId) {
int fee = -1; int fee = -1;
Connection con; try (Connection con = DatabaseConnection.getConnection();
try { PreparedStatement ps = con.prepareStatement("SELECT req_meso FROM makercreatedata WHERE itemid = ?")) {
con = DatabaseConnection.getConnection();
PreparedStatement ps = con.prepareStatement("SELECT req_meso FROM makercreatedata WHERE itemid = ?");
ps.setInt(1, itemId); ps.setInt(1, itemId);
ResultSet rs = ps.executeQuery();
if(rs.next()) { // cost is 13.6363~ % of the original value, trim by 1000. try (ResultSet rs = ps.executeQuery()) {
float val = (float) (rs.getInt("req_meso") * 0.13636363636364); if (rs.next()) { // cost is 13.6363~ % of the original value, trim by 1000.
fee = (int) (val / 1000); float val = (float) (rs.getInt("req_meso") * 0.13636363636364);
fee *= 1000; fee = (int) (val / 1000);
fee *= 1000;
}
} }
rs.close();
ps.close();
con.close();
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
@@ -2108,21 +2052,18 @@ public class MapleItemInformationProvider {
public Set<String> getWhoDrops(Integer itemId) { public Set<String> getWhoDrops(Integer itemId) {
Set<String> list = new HashSet<>(); Set<String> list = new HashSet<>();
Connection con = null; try (Connection con = DatabaseConnection.getConnection();
try { PreparedStatement ps = con.prepareStatement("SELECT dropperid FROM drop_data WHERE itemid = ? LIMIT 50")) {
con = DatabaseConnection.getConnection();
PreparedStatement ps = con.prepareStatement("SELECT dropperid FROM drop_data WHERE itemid = ? LIMIT 50");
ps.setInt(1, itemId); ps.setInt(1, itemId);
ResultSet rs = ps.executeQuery();
while(rs.next()) { try (ResultSet rs = ps.executeQuery()) {
String resultName = MapleMonsterInformationProvider.getInstance().getMobNameFromId(rs.getInt("dropperid")); while (rs.next()) {
if (!resultName.isEmpty()) { String resultName = MapleMonsterInformationProvider.getInstance().getMobNameFromId(rs.getInt("dropperid"));
list.add(resultName); if (!resultName.isEmpty()) {
list.add(resultName);
}
} }
} }
rs.close();
ps.close();
con.close();
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }