· 9 years ago · May 02, 2017, 05:48 AM
1package net.st0rm.ss;
2
3import java.sql.*;
4
5import net.st0rm.ss.objects.Item;
6
7public class Database {
8 private static Database instance = null;
9 private Connection con = null;
10
11 private Database() {
12 }
13
14 public static Database getInstance() {
15 try {
16 if (instance == null || instance.con.isClosed()) {
17 instance = new Database();
18 instance.connect();
19 }
20 } catch (SQLException e) {
21 instance = new Database();
22 instance.connect();
23 }
24 return instance;
25 }
26
27 /**
28 * Returns the connection, connects only if current connection does not
29 * exist openly
30 *
31 * @return Connection to MySQL
32 */
33 public Connection connect() {
34 try {
35 if (con != null && !con.isClosed())
36 return con;
37 con = DriverManager.getConnection("jdbc:mysql://"
38 + Config.prop.getProperty("MySQLHost") + ":"
39 + Config.prop.getProperty("MySQLPort") + "/"
40 + Config.prop.getProperty("MySQLDatabase"), Config.prop
41 .getProperty("MySQLUser"), Config.prop
42 .getProperty("MySQLPass"));
43 /*
44 * con.prepareStatement("" +
45 * "CREATE TABLE IF NOT EXISTS `aliases` (`alias` text NOT NULL,`definition` text NOT NULL) ENGINE=MyISAM DEFAULT CHARSET=latin1;"
46 * +
47 * "CREATE TABLE IF NOT EXISTS `bans` (`id` bigint(20) unsigned NOT NULL auto_increment,`name` varchar(50) default NULL,`ip` varchar(15) default NULL,`serial` varchar(64) default NULL,`time_placed` varchar(30) default '0',`time_expires` varchar(30) default '0',`reason` text, PRIMARY KEY (`id`)) ENGINE=MyISAM AUTO_INCREMENT=1417 DEFAULT CHARSET=latin1;"
48 * +
49 * "CREATE TABLE IF NOT EXISTS `fame` (`name` varchar(50) NOT NULL,`fame` int(11) default '0',`last_famed` varchar(15) default '0',PRIMARY KEY (`name`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;"
50 * +
51 * "CREATE TABLE IF NOT EXISTS `join_messages` (`name` varchar(50) NOT NULL,`message` text,PRIMARY KEY (`name`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;"
52 * +
53 * "CREATE TABLE IF NOT EXISTS `mods` (`name` varchar(50) NOT NULL,`flags` varchar(30) NOT NULL,`ip` varchar(15) default NULL,`last_login` int(30) default '0',`suspended` int(1) default '0',PRIMARY KEY (`name`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;"
54 * +
55 * "CREATE TABLE IF NOT EXISTS `modules` (`name` varchar(100) NOT NULL,`enabled` int(1) default '1',PRIMARY KEY (`name`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;"
56 * +
57 * "CREATE TABLE IF NOT EXISTS `music` (`song` text NOT NULL,`file` varchar(50) NOT NULL,`length` decimal(10,0) NOT NULL,PRIMARY KEY (`file`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;"
58 * +
59 * "CREATE TABLE IF NOT EXISTS `offenses` (`case` int(11) NOT NULL auto_increment,`name` varchar(50) NOT NULL,`time` varchar(30) default '0',`ip` varchar(15) default '255.255.255.255',`data` text,PRIMARY KEY (`case`)) ENGINE=MyISAM AUTO_INCREMENT=9155 DEFAULT CHARSET=latin1;"
60 * +
61 * "CREATE TABLE IF NOT EXISTS `rank_table` (`name` text NOT NULL,`min_points` int(11) NOT NULL default '0',`max_points` int(11) NOT NULL default '0',`credits` int(5) default NULL) ENGINE=MyISAM DEFAULT CHARSET=latin1;"
62 * +
63 * "CREATE TABLE IF NOT EXISTS `ranks` (`name` varchar(50) NOT NULL,`rank` int(11) default '0',`banned` int(1) default '0',PRIMARY KEY (`name`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;"
64 * +
65 * "CREATE TABLE IF NOT EXISTS `sounds` (`keywords` text NOT NULL,`soundfile` varchar(500) NOT NULL) ENGINE=MyISAM DEFAULT CHARSET=latin1;"
66 * + "").executeUpdate();
67 */
68 return con;
69 } catch (SQLException e) {
70 // TODO Auto-generated catch block
71 e.printStackTrace();
72 }
73 return null;
74 }
75
76 public boolean getIsEnabled(String name) {
77 con = connect();
78 PreparedStatement ps = null;
79 ResultSet rs = null;
80 try {
81 ps = con
82 .prepareStatement("SELECT enabled FROM modules WHERE name=? LIMIT 1");
83 ps.setString(1, name);
84 rs = ps.executeQuery();
85 if (rs.next()) {
86 return rs.getInt("enabled") == 1;
87 } else {
88 Database.close(ps);
89 ps = con
90 .prepareStatement("INSERT INTO modules (name,enabled) VALUES (?,?)");
91 ps.setString(1, name);
92 ps.setInt(2, 1);
93 ps.executeUpdate();
94 }
95 } catch (SQLException e) {
96 // TODO Auto-generated catch block
97 e.printStackTrace();
98 } finally {
99 Database.close(rs,ps);
100 }
101 return true;
102 }
103
104 public boolean agetIsEnabled(String name) {
105 con = connect();
106 PreparedStatement ps = null;
107 ResultSet rs = null;
108 try {
109 ps = con
110 .prepareStatement("SELECT enabled FROM adminmodules WHERE name=? LIMIT 1");
111 ps.setString(1, name);
112 rs = ps.executeQuery();
113 if (rs.next()) {
114 return rs.getInt("enabled") == 1;
115 } else {
116 ps = con
117 .prepareStatement("INSERT INTO adminmodules (name,enabled) VALUES (?,?)");
118 ps.setString(1, name);
119 ps.setInt(2, 1);
120 ps.executeUpdate();
121 }
122 } catch (SQLException e) {
123 // TODO Auto-generated catch block
124 e.printStackTrace();
125 } finally {
126 Database.close(rs,ps);
127 }
128 return true;
129 }
130
131 /**
132 * Toggles a module in the database, you still need to load() to update
133 * settings
134 *
135 * @param name
136 * Module to toggle
137 */
138 public void toggle(String name) {
139 PreparedStatement ps = null;
140 try {
141 ps = connect()
142 .prepareStatement(
143 "UPDATE modules SET `enabled`=IF(`enabled`='1','0','1') WHERE name=?");
144 ps.setString(1, name);
145 ps.executeUpdate();
146 } catch (SQLException e) {
147 // TODO Auto-generated catch block
148 e.printStackTrace();
149 } finally {
150 Database.close(ps);
151 }
152 }
153
154 public void atoggle(String name) {
155 PreparedStatement ps = null;
156 try {
157 ps = connect()
158 .prepareStatement(
159 "UPDATE adminmodules SET `enabled`=IF(`enabled`='1','0','1') WHERE name=?");
160 ps.setString(1, name);
161 ps.executeUpdate();
162 } catch (SQLException e) {
163 // TODO Auto-generated catch block
164 e.printStackTrace();
165 } finally {
166 Database.close(ps);
167 }
168 }
169
170 public void load() {
171 try {
172 Config.moduleShowKills = getIsEnabled("Show Kills");
173 Config.moduleShowDetailedKills = getIsEnabled("Show Detailed Kills");
174 Config.moduleShowSerials = getIsEnabled("Show Serials");
175 Config.moduleShowGameNotices = getIsEnabled("Show Game Notices");
176 Config.moduleShowGameSpyData = getIsEnabled("Show GameSpy Data");
177 Config.moduleShowVehicleKills = getIsEnabled("Show Vehicle Kills");
178 Config.moduleShowCTF = getIsEnabled("Show CTF");
179 Config.moduleShowErrors = getIsEnabled("Show Errors");
180 Config.moduleShowCinematics = getIsEnabled("Show Cinematics");
181 Config.moduleShowMoney = getIsEnabled("Show Money");
182 Config.moduleShowSecurity = getIsEnabled("Show Security");
183 Config.moduleShowBiatch = getIsEnabled("Show BIATCH");
184 Config.moduleShowPurchases = getIsEnabled("Show Purchases");
185 Config.moduleNewKillMessages = getIsEnabled("New Kill Messages");
186 // Config.moduleShowVersion = getIsEnabled("Show Versions");
187 Config.moduleShowCharChanges = getIsEnabled("Show Char Changes");
188 Config.POLL_GAMEOVER = getIsEnabled("Poll Gameovers");
189 Config.POLL_QKICK = getIsEnabled("Poll QKicks");
190 Config.POLL_KICK = getIsEnabled("Poll Kicks");
191 Config.amoduleShowKills = agetIsEnabled("Admin Show Kills");
192 Config.amoduleShowDetailedKills = agetIsEnabled("Admin Show Detailed Kills");
193 Config.amoduleShowSerials = agetIsEnabled("Admin Show Serials");
194 Config.amoduleShowGameNotices = agetIsEnabled("Admin Show Game Notices");
195 Config.amoduleShowGameSpyData = agetIsEnabled("Admin Show GameSpy Data");
196 Config.amoduleShowVehicleKills = agetIsEnabled("Admin Show Vehicle Kills");
197 Config.amoduleShowCTF = agetIsEnabled("Admin Show CTF");
198 Config.amoduleShowErrors = agetIsEnabled("Admin Show Errors");
199 Config.amoduleShowCinematics = agetIsEnabled("Admin Show Cinematics");
200 Config.amoduleShowMoney = agetIsEnabled("Admin Show Money");
201 Config.amoduleShowSecurity = agetIsEnabled("Admin Show Security");
202 Config.amoduleShowBiatch = agetIsEnabled("Admin Show BIATCH");
203 Config.amoduleShowPurchases = agetIsEnabled("Admin Show Purchases");
204 Config.amoduleNewKillMessages = agetIsEnabled("Admin New Kill Messages");
205 // Config.moduleShowVersion = getIsEnabled("Show Versions");
206 Config.amoduleShowCharChanges = agetIsEnabled("Admin Show Char Changes");
207 Config.amoduleShowTeamMessages = agetIsEnabled("Admin Show Team Messages");
208 Config.amoduleShowPlayerMessages = agetIsEnabled("Admin Show Player Messages");
209 AliasManager.getInstance().reload();
210
211 PreparedStatement ps = Database.getInstance().connect()
212 .prepareStatement("SELECT * FROM sounds");
213 ResultSet rs = ps.executeQuery();
214 while (rs.next()) {
215 Config.soundTriggers.put(rs.getString(1).toLowerCase(), rs
216 .getString(2).toLowerCase());
217 }
218 Database.close(rs,ps);
219
220 ps = Database.getInstance().connect().prepareStatement(
221 "SELECT * FROM items");
222 rs = ps.executeQuery();
223 while (rs.next()) {
224 Item item = new Item();
225 item.aliases = rs.getString("item").split(",");
226 item.gdi_cin = rs.getString("gdicin");
227 item.neu_cin = rs.getString("neucin");
228 item.nod_cin = rs.getString("nodcin");
229 item.cost = rs.getInt("cost");
230 item.rank = rs.getInt("rank");
231 item.itemname = rs.getString("itemname");
232 item.maps = rs.getString("maps").split(";");
233 String servers = rs.getString("servers");
234 int c_servers = servers.split(",").length;
235 int[] a_servers = new int[c_servers];
236 int i = 0;
237 for (String s : servers.split(",")) {
238 a_servers[i] = Integer.parseInt(s.trim());
239 i++;
240 }
241 item.type = rs.getInt("type");
242 synchronized (Item.items) {
243 Item.items.add(item);
244 }
245 Database.close(rs, ps);
246 }
247
248 } catch (Exception e) {
249 Log.log("Could not load from DB.");
250 Log.die(e);
251 }
252
253 }
254
255 public static void close(ResultSet rs, PreparedStatement ps) {
256 if (rs != null) {
257 try {
258 rs.close();
259 } catch (SQLException e) {
260 }
261 }
262 if (ps != null) {
263 try {
264 ps.close();
265 } catch (SQLException e) {
266 }
267 }
268
269 }
270
271 public static void close(PreparedStatement ps) {
272 close(null, ps);
273 }
274 public static void close(ResultSet rs) {
275 close(rs, null);
276 }
277}