Added sessionLookup method to API
This commit is contained in:
parent
d69d762bf4
commit
25b03511c2
2 changed files with 102 additions and 3 deletions
|
|
@ -16,6 +16,7 @@ import org.bukkit.block.data.BlockData;
|
||||||
import org.bukkit.entity.EntityType;
|
import org.bukkit.entity.EntityType;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import net.coreprotect.api.SessionLookup;
|
||||||
import net.coreprotect.config.Config;
|
import net.coreprotect.config.Config;
|
||||||
import net.coreprotect.consumer.Queue;
|
import net.coreprotect.consumer.Queue;
|
||||||
import net.coreprotect.database.Database;
|
import net.coreprotect.database.Database;
|
||||||
|
|
@ -42,8 +43,18 @@ public class CoreProtectAPI extends Queue {
|
||||||
|
|
||||||
public String getActionString() {
|
public String getActionString() {
|
||||||
int actionID = Integer.parseInt(parse[7]);
|
int actionID = Integer.parseInt(parse[7]);
|
||||||
String result = "unknown";
|
if (parse.length < 13 && Integer.parseInt(parse[6]) == SessionLookup.ID) {
|
||||||
|
switch (actionID) {
|
||||||
|
case 0:
|
||||||
|
return "logout";
|
||||||
|
case 1:
|
||||||
|
return "login";
|
||||||
|
default:
|
||||||
|
return "unknown";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String result = "unknown";
|
||||||
if (actionID == 0) {
|
if (actionID == 0) {
|
||||||
result = "break";
|
result = "break";
|
||||||
}
|
}
|
||||||
|
|
@ -79,6 +90,10 @@ public class CoreProtectAPI extends Queue {
|
||||||
}
|
}
|
||||||
|
|
||||||
public Material getType() {
|
public Material getType() {
|
||||||
|
if (parse.length < 13) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
int actionID = this.getActionId();
|
int actionID = this.getActionId();
|
||||||
int type = Integer.parseInt(parse[5]);
|
int type = Integer.parseInt(parse[5]);
|
||||||
String typeName;
|
String typeName;
|
||||||
|
|
@ -95,8 +110,12 @@ public class CoreProtectAPI extends Queue {
|
||||||
}
|
}
|
||||||
|
|
||||||
public BlockData getBlockData() {
|
public BlockData getBlockData() {
|
||||||
|
if (parse.length < 13) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
String blockData = parse[12];
|
String blockData = parse[12];
|
||||||
if (blockData.length() == 0) {
|
if (blockData == null || blockData.length() == 0) {
|
||||||
return getType().createBlockData();
|
return getType().createBlockData();
|
||||||
}
|
}
|
||||||
return Bukkit.getServer().createBlockData(blockData);
|
return Bukkit.getServer().createBlockData(blockData);
|
||||||
|
|
@ -115,11 +134,15 @@ public class CoreProtectAPI extends Queue {
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isRolledBack() {
|
public boolean isRolledBack() {
|
||||||
|
if (parse.length < 13) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return Integer.parseInt(parse[8]) == 1;
|
return Integer.parseInt(parse[8]) == 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String worldName() {
|
public String worldName() {
|
||||||
return Util.getWorldName(Integer.parseInt(parse[9]));
|
return Util.getWorldName(Integer.parseInt(parse.length < 13 ? parse[5] : parse[9]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -152,6 +175,10 @@ public class CoreProtectAPI extends Queue {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<String[]> sessionLookup(String user, int time) {
|
||||||
|
return SessionLookup.performLookup(user, time);
|
||||||
|
}
|
||||||
|
|
||||||
public boolean hasPlaced(String user, Block block, int time, int offset) {
|
public boolean hasPlaced(String user, Block block, int time, int offset) {
|
||||||
// Determine if a user has placed a block at this location in the last # of seconds.
|
// Determine if a user has placed a block at this location in the last # of seconds.
|
||||||
boolean match = false;
|
boolean match = false;
|
||||||
|
|
|
||||||
72
src/main/java/net/coreprotect/api/SessionLookup.java
Normal file
72
src/main/java/net/coreprotect/api/SessionLookup.java
Normal file
|
|
@ -0,0 +1,72 @@
|
||||||
|
package net.coreprotect.api;
|
||||||
|
|
||||||
|
import java.sql.Connection;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.Statement;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
|
import net.coreprotect.config.Config;
|
||||||
|
import net.coreprotect.config.ConfigHandler;
|
||||||
|
import net.coreprotect.database.Database;
|
||||||
|
import net.coreprotect.database.statement.UserStatement;
|
||||||
|
|
||||||
|
public class SessionLookup {
|
||||||
|
|
||||||
|
public static final int ID = 0;
|
||||||
|
|
||||||
|
public static List<String[]> performLookup(String user, int offset) {
|
||||||
|
if (!Config.getGlobal().API_ENABLED) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<String[]> result = new ArrayList<>();
|
||||||
|
try (Connection connection = Database.getConnection(false, 1000)) {
|
||||||
|
if (connection == null || user == null) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
String type = String.valueOf(ID);
|
||||||
|
int time = (int) (System.currentTimeMillis() / 1000L);
|
||||||
|
int checkTime = 0;
|
||||||
|
if (offset > 0) {
|
||||||
|
checkTime = time - offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ConfigHandler.playerIdCache.get(user.toLowerCase(Locale.ROOT)) == null) {
|
||||||
|
UserStatement.loadId(connection, user, null);
|
||||||
|
}
|
||||||
|
int userId = ConfigHandler.playerIdCache.get(user.toLowerCase(Locale.ROOT));
|
||||||
|
|
||||||
|
Statement statement = connection.createStatement();
|
||||||
|
String query = "SELECT time,user,wid,x,y,z,action FROM " + ConfigHandler.prefix + "session WHERE user = '" + userId + "' AND time > '" + checkTime + "' ORDER BY rowid DESC";
|
||||||
|
ResultSet results = statement.executeQuery(query);
|
||||||
|
while (results.next()) {
|
||||||
|
String resultTime = results.getString("time");
|
||||||
|
int resultUserId = results.getInt("user");
|
||||||
|
String resultWorldId = results.getString("wid");
|
||||||
|
String resultX = results.getString("x");
|
||||||
|
String resultY = results.getString("y");
|
||||||
|
String resultZ = results.getString("z");
|
||||||
|
String resultAction = results.getString("action");
|
||||||
|
|
||||||
|
if (ConfigHandler.playerIdCacheReversed.get(resultUserId) == null) {
|
||||||
|
UserStatement.loadName(connection, resultUserId);
|
||||||
|
}
|
||||||
|
String resultUser = ConfigHandler.playerIdCacheReversed.get(resultUserId);
|
||||||
|
|
||||||
|
String[] lookupData = new String[] { resultTime, resultUser, resultX, resultY, resultZ, resultWorldId, type, resultAction };
|
||||||
|
result.add(lookupData);
|
||||||
|
}
|
||||||
|
results.close();
|
||||||
|
statement.close();
|
||||||
|
}
|
||||||
|
catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue