package me.km.snuviscript; import java.sql.ResultSet; import java.sql.SQLException; import java.util.UUID; import me.hammerle.snuviscript.code.Compiler; import me.km.KajetansMod; import me.km.databank.IStatement; public class ScriptBank { public ScriptBank() { KajetansMod.databank.execute("CREATE TABLE IF NOT EXISTS scriptdata (" + "id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, " + "player_id INT NOT NULL, " + "var VARCHAR(20) NOT NULL, " + "value VARCHAR(256) NOT NULL, " + "UNIQUE INDEX (player_id,var), " + "FOREIGN KEY (player_id) REFERENCES minecraft.players(id) ON DELETE RESTRICT);"); KajetansMod.databank.execute("CREATE TABLE IF NOT EXISTS scriptmaps (" + "id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, " + "map VARCHAR(255) NOT NULL, " + "keyname VARCHAR(255) NOT NULL, " + "value VARCHAR(255) NOT NULL, " + "INDEX (map), " + "UNIQUE INDEX (map,keyname));"); KajetansMod.databank.execute("CREATE TABLE IF NOT EXISTS scriptdualmaps (" + "id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, " + "map VARCHAR(255) NOT NULL, " + "keyname VARCHAR(255) NOT NULL, " + "seckeyname VARCHAR(255) NOT NULL, " + "value VARCHAR(255) NOT NULL, " + "INDEX (map), " + "UNIQUE INDEX (map,keyname,seckeyname));"); } private final IStatement setVar = KajetansMod.databank.createStatement( "INSERT INTO scriptdata (player_id,var,value) SELECT ?, ?, ? ON DUPLICATE KEY UPDATE scriptdata.value=?;"); public void setVar(String value, String var, UUID uuid) { try { setVar.validate(); setVar.setInt(1, KajetansMod.playerbank.getPlayerId(uuid)); setVar.setString(2, var); setVar.setString(3, value); setVar.setString(4, value); setVar.executeUpdate(); } catch(SQLException ex) { ex.printStackTrace(); } } private final IStatement deleteVar = KajetansMod.databank.createStatement( "DELETE FROM scriptdata WHERE player_id = ? AND var = ?;"); public void deleteVar(String var, UUID uuid) { try { deleteVar.validate(); deleteVar.setInt(1, KajetansMod.playerbank.getPlayerId(uuid)); deleteVar.setString(2, var); deleteVar.executeUpdate(); } catch(SQLException ex) { ex.printStackTrace(); } } private final IStatement getVar = KajetansMod.databank.createStatement( "SELECT value from scriptdata WHERE player_id = ? and var = ?;"); public Object getVar(String var, UUID uuid, Object error) { try { getVar.validate(); getVar.setInt(1, KajetansMod.playerbank.getPlayerId(uuid)); getVar.setString(2, var); try(ResultSet rs = getVar.executeQuery()) { if(rs.next()) { return Compiler.convert(rs.getString(1)); } return error; } catch(SQLException ex) { ex.printStackTrace(); } } catch(SQLException ex) { ex.printStackTrace(); } return error; } public Object getVar(String var, UUID uuid) { return getVar(var, uuid, null); } private final IStatement addMapElement = KajetansMod.databank.createStatement( "INSERT INTO scriptmaps (map,keyname,value) SELECT ?, ?, ? ON DUPLICATE KEY UPDATE value=?;"); public void addMapElement(String map, String key, String value) { try { addMapElement.validate(); addMapElement.setString(1, map); addMapElement.setString(2, key); addMapElement.setString(3, value); addMapElement.setString(4, value); addMapElement.executeUpdate(); } catch(SQLException ex) { ex.printStackTrace(); } } private final IStatement removeMapElement = KajetansMod.databank.createStatement( "DELETE FROM scriptmaps WHERE map = ? AND keyname = ?;"); public void removeMapElement(String map, String key) { try { removeMapElement.validate(); removeMapElement.setString(1, map); removeMapElement.setString(2, key); removeMapElement.executeUpdate(); } catch(SQLException ex) { ex.printStackTrace(); } } private final IStatement removeMap = KajetansMod.databank.createStatement( "DELETE FROM scriptmaps WHERE map = ?;"); public void removeMap(String map) { try { removeMap.validate(); removeMap.setString(1, map); removeMap.executeUpdate(); } catch(SQLException ex) { ex.printStackTrace(); } } private final IStatement getMapValue = KajetansMod.databank.createStatement( "SELECT value from scriptmaps WHERE map = ? AND keyname = ?;"); public Object getMapValue(String map, String key) { try { getMapValue.validate(); getMapValue.setString(1, map); getMapValue.setString(2, key); try(ResultSet rs = getMapValue.executeQuery()) { if(rs.next()) { return Compiler.convert(rs.getString(1)); } return null; } catch(SQLException ex) { ex.printStackTrace(); } } catch(SQLException ex) { ex.printStackTrace(); } return null; } private final IStatement addDualMapElement = KajetansMod.databank.createStatement( "INSERT INTO scriptdualmaps (map,keyname,seckeyname,value) SELECT ?, ?, ?, ? ON DUPLICATE KEY UPDATE value=?;"); public void addDualMapElement(String map, String key, String key2, String value) { try { addDualMapElement.validate(); addDualMapElement.setString(1, map); addDualMapElement.setString(2, key); addDualMapElement.setString(3, key2); addDualMapElement.setString(4, value); addDualMapElement.setString(5, value); addDualMapElement.executeUpdate(); } catch(SQLException ex) { ex.printStackTrace(); } } private final IStatement removeDualMapElement = KajetansMod.databank.createStatement( "DELETE FROM scriptdualmaps WHERE map = ? AND keyname = ?;"); public void removeDualMapElement(String map, String key) { try { removeDualMapElement.validate(); removeDualMapElement.setString(1, map); removeDualMapElement.setString(2, key); removeDualMapElement.executeUpdate(); } catch(SQLException ex) { ex.printStackTrace(); } } private final IStatement removeDualMap = KajetansMod.databank.createStatement( "DELETE FROM scriptdualmaps WHERE map = ?;"); public void removeDualMap(String map) { try { removeDualMap.validate(); removeDualMap.setString(1, map); removeDualMap.executeUpdate(); } catch(SQLException ex) { ex.printStackTrace(); } } private final IStatement removeDualMapElement2 = KajetansMod.databank.createStatement( "DELETE FROM scriptdualmaps WHERE map = ? AND keyname = ? AND seckeyname = ?;"); public void removeDualMapElement(String map, String key, String key2) { try { removeDualMapElement2.validate(); removeDualMapElement2.setString(1, map); removeDualMapElement2.setString(2, key); removeDualMapElement2.setString(3, key2); removeDualMapElement2.executeUpdate(); } catch(SQLException ex) { ex.printStackTrace(); } } private final IStatement getDualMapValue = KajetansMod.databank.createStatement( "SELECT value from scriptdualmaps WHERE map = ? AND keyname = ? AND seckeyname = ?;"); public Object getDualMapValue(String map, String key, String key2) { try { getDualMapValue.validate(); getDualMapValue.setString(1, map); getDualMapValue.setString(2, key); getDualMapValue.setString(3, key2); try(ResultSet rs = getDualMapValue.executeQuery()) { if(rs.next()) { return Compiler.convert(rs.getString(1)); } return null; } catch(SQLException ex) { ex.printStackTrace(); } } catch(SQLException ex) { ex.printStackTrace(); } return null; } }