Added sessionLookup method to API

This commit is contained in:
Intelli 2022-02-15 19:59:25 -07:00
parent d69d762bf4
commit 25b03511c2
2 changed files with 102 additions and 3 deletions

View File

@ -16,6 +16,7 @@ import org.bukkit.block.data.BlockData;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import net.coreprotect.api.SessionLookup;
import net.coreprotect.config.Config;
import net.coreprotect.consumer.Queue;
import net.coreprotect.database.Database;
@ -42,8 +43,18 @@ public class CoreProtectAPI extends Queue {
public String getActionString() {
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) {
result = "break";
}
@ -79,6 +90,10 @@ public class CoreProtectAPI extends Queue {
}
public Material getType() {
if (parse.length < 13) {
return null;
}
int actionID = this.getActionId();
int type = Integer.parseInt(parse[5]);
String typeName;
@ -95,8 +110,12 @@ public class CoreProtectAPI extends Queue {
}
public BlockData getBlockData() {
if (parse.length < 13) {
return null;
}
String blockData = parse[12];
if (blockData.length() == 0) {
if (blockData == null || blockData.length() == 0) {
return getType().createBlockData();
}
return Bukkit.getServer().createBlockData(blockData);
@ -115,11 +134,15 @@ public class CoreProtectAPI extends Queue {
}
public boolean isRolledBack() {
if (parse.length < 13) {
return false;
}
return Integer.parseInt(parse[8]) == 1;
}
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;
}
public List<String[]> sessionLookup(String user, int time) {
return SessionLookup.performLookup(user, time);
}
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.
boolean match = false;

View 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;
}
}