mirror of
https://github.com/PlayPro/CoreProtect.git
synced 2024-12-30 18:08:24 +01:00
Fixed inventory lookups/rollbacks missing block placement actions
This commit is contained in:
parent
527be90249
commit
585d8b275a
@ -139,7 +139,7 @@ public class CoreProtectAPI extends Queue {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return Integer.parseInt(parse[8]) == 1;
|
return (Integer.parseInt(parse[8]) == 1 || Integer.parseInt(parse[8]) == 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String worldName() {
|
public String worldName() {
|
||||||
|
@ -869,7 +869,7 @@ public class LookupCommand {
|
|||||||
int ddata = Integer.parseInt(data[6]);
|
int ddata = Integer.parseInt(data[6]);
|
||||||
int daction = Integer.parseInt(data[7]);
|
int daction = Integer.parseInt(data[7]);
|
||||||
int amount = Integer.parseInt(data[10]);
|
int amount = Integer.parseInt(data[10]);
|
||||||
String rbd = (Integer.parseInt(data[8]) == 1 ? Color.STRIKETHROUGH : "");
|
String rbd = ((Integer.parseInt(data[8]) == 2 || Integer.parseInt(data[8]) == 3) ? Color.STRIKETHROUGH : "");
|
||||||
String timeago = Util.getTimeSince(Integer.parseInt(time), unixtimestamp, true);
|
String timeago = Util.getTimeSince(Integer.parseInt(time), unixtimestamp, true);
|
||||||
String dname = Util.nameFilter(Util.getType(Integer.parseInt(dtype)).name().toLowerCase(Locale.ROOT), ddata);
|
String dname = Util.nameFilter(Util.getType(Integer.parseInt(dtype)).name().toLowerCase(Locale.ROOT), ddata);
|
||||||
|
|
||||||
@ -895,7 +895,7 @@ public class LookupCommand {
|
|||||||
for (String[] data : lookupList) {
|
for (String[] data : lookupList) {
|
||||||
int drb = Integer.parseInt(data[8]);
|
int drb = Integer.parseInt(data[8]);
|
||||||
String rbd = "";
|
String rbd = "";
|
||||||
if (drb == 1) {
|
if (drb == 1 || drb == 3) {
|
||||||
rbd = Color.STRIKETHROUGH;
|
rbd = Color.STRIKETHROUGH;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,6 +44,7 @@ public class Process {
|
|||||||
public static final int ITEM_TRANSACTION = 26;
|
public static final int ITEM_TRANSACTION = 26;
|
||||||
public static final int INVENTORY_ROLLBACK_UPDATE = 27;
|
public static final int INVENTORY_ROLLBACK_UPDATE = 27;
|
||||||
public static final int INVENTORY_CONTAINER_ROLLBACK_UPDATE = 28;
|
public static final int INVENTORY_CONTAINER_ROLLBACK_UPDATE = 28;
|
||||||
|
public static final int BLOCK_INVENTORY_ROLLBACK_UPDATE = 29;
|
||||||
|
|
||||||
public static int lastLockUpdate = 0;
|
public static int lastLockUpdate = 0;
|
||||||
private static volatile int currentConsumerSize = 0;
|
private static volatile int currentConsumerSize = 0;
|
||||||
@ -166,6 +167,9 @@ public class Process {
|
|||||||
case Process.INVENTORY_CONTAINER_ROLLBACK_UPDATE:
|
case Process.INVENTORY_CONTAINER_ROLLBACK_UPDATE:
|
||||||
RollbackUpdateProcess.process(statement, processId, id, forceData, 3);
|
RollbackUpdateProcess.process(statement, processId, id, forceData, 3);
|
||||||
break;
|
break;
|
||||||
|
case Process.BLOCK_INVENTORY_ROLLBACK_UPDATE:
|
||||||
|
RollbackUpdateProcess.process(statement, processId, id, forceData, 4);
|
||||||
|
break;
|
||||||
case Process.WORLD_INSERT:
|
case Process.WORLD_INSERT:
|
||||||
WorldInsertProcess.process(preparedStmtWorlds, i, statement, object, forceData);
|
WorldInsertProcess.process(preparedStmtWorlds, i, statement, object, forceData);
|
||||||
break;
|
break;
|
||||||
|
@ -6,6 +6,7 @@ import java.util.Map;
|
|||||||
|
|
||||||
import net.coreprotect.consumer.Consumer;
|
import net.coreprotect.consumer.Consumer;
|
||||||
import net.coreprotect.database.Database;
|
import net.coreprotect.database.Database;
|
||||||
|
import net.coreprotect.utility.Util;
|
||||||
|
|
||||||
class RollbackUpdateProcess {
|
class RollbackUpdateProcess {
|
||||||
|
|
||||||
@ -16,8 +17,8 @@ class RollbackUpdateProcess {
|
|||||||
for (Object[] listRow : list) {
|
for (Object[] listRow : list) {
|
||||||
long rowid = (Long) listRow[0];
|
long rowid = (Long) listRow[0];
|
||||||
int rolledBack = (Integer) listRow[9];
|
int rolledBack = (Integer) listRow[9];
|
||||||
if (rolledBack == action) {
|
if (Util.rolledBack(rolledBack, (table == 2 || table == 3 || table == 4)) == action) { // 1 = restore, 0 = rollback
|
||||||
Database.performUpdate(statement, rowid, action, table);
|
Database.performUpdate(statement, rowid, rolledBack, table);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
updateLists.remove(id);
|
updateLists.remove(id);
|
||||||
|
@ -96,7 +96,7 @@ public class ContainerRollback extends Queue {
|
|||||||
int rowTypeRaw = (Integer) lookupRow[6];
|
int rowTypeRaw = (Integer) lookupRow[6];
|
||||||
int rowData = (Integer) lookupRow[7];
|
int rowData = (Integer) lookupRow[7];
|
||||||
int rowAction = (Integer) lookupRow[8];
|
int rowAction = (Integer) lookupRow[8];
|
||||||
int rowRolledBack = (Integer) lookupRow[9];
|
int rowRolledBack = Util.rolledBack((Integer) lookupRow[9], false);
|
||||||
// int rowWid = (Integer)lookupRow[10];
|
// int rowWid = (Integer)lookupRow[10];
|
||||||
int rowAmount = (Integer) lookupRow[11];
|
int rowAmount = (Integer) lookupRow[11];
|
||||||
byte[] rowMetadata = (byte[]) lookupRow[12];
|
byte[] rowMetadata = (byte[]) lookupRow[12];
|
||||||
|
@ -187,22 +187,15 @@ public class Database extends Queue {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void performUpdate(Statement statement, long id, int action, int table) {
|
public static void performUpdate(Statement statement, long id, int rb, int table) {
|
||||||
try {
|
try {
|
||||||
int rolledBack = 1;
|
int rolledBack = Util.toggleRolledBack(rb, (table == 2 || table == 3 || table == 4)); // co_item, co_container, co_block
|
||||||
if (action == 1) {
|
if (table == 1 || table == 3) {
|
||||||
rolledBack = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (table == 1) {
|
|
||||||
statement.executeUpdate("UPDATE " + ConfigHandler.prefix + "container SET rolled_back='" + rolledBack + "' WHERE rowid='" + id + "'");
|
statement.executeUpdate("UPDATE " + ConfigHandler.prefix + "container SET rolled_back='" + rolledBack + "' WHERE rowid='" + id + "'");
|
||||||
}
|
}
|
||||||
else if (table == 2) {
|
else if (table == 2) {
|
||||||
statement.executeUpdate("UPDATE " + ConfigHandler.prefix + "item SET rolled_back='" + rolledBack + "' WHERE rowid='" + id + "'");
|
statement.executeUpdate("UPDATE " + ConfigHandler.prefix + "item SET rolled_back='" + rolledBack + "' WHERE rowid='" + id + "'");
|
||||||
}
|
}
|
||||||
else if (table == 3) {
|
|
||||||
statement.executeUpdate("UPDATE " + ConfigHandler.prefix + "container SET rolled_back_inventory='" + rolledBack + "' WHERE rowid='" + id + "'");
|
|
||||||
}
|
|
||||||
else {
|
else {
|
||||||
statement.executeUpdate("UPDATE " + ConfigHandler.prefix + "block SET rolled_back='" + rolledBack + "' WHERE rowid='" + id + "'");
|
statement.executeUpdate("UPDATE " + ConfigHandler.prefix + "block SET rolled_back='" + rolledBack + "' WHERE rowid='" + id + "'");
|
||||||
}
|
}
|
||||||
@ -218,7 +211,7 @@ public class Database extends Queue {
|
|||||||
String signInsert = "INSERT INTO " + ConfigHandler.prefix + "sign (time, user, wid, x, y, z, action, color, data, line_1, line_2, line_3, line_4) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
|
String signInsert = "INSERT INTO " + ConfigHandler.prefix + "sign (time, user, wid, x, y, z, action, color, data, line_1, line_2, line_3, line_4) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
|
||||||
String blockInsert = "INSERT INTO " + ConfigHandler.prefix + "block (time, user, wid, x, y, z, type, data, meta, blockdata, action, rolled_back) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
|
String blockInsert = "INSERT INTO " + ConfigHandler.prefix + "block (time, user, wid, x, y, z, type, data, meta, blockdata, action, rolled_back) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
|
||||||
String skullInsert = "INSERT INTO " + ConfigHandler.prefix + "skull (time, owner) VALUES (?, ?)";
|
String skullInsert = "INSERT INTO " + ConfigHandler.prefix + "skull (time, owner) VALUES (?, ?)";
|
||||||
String containerInsert = "INSERT INTO " + ConfigHandler.prefix + "container (time, user, wid, x, y, z, type, data, amount, metadata, action, rolled_back, rolled_back_inventory) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
|
String containerInsert = "INSERT INTO " + ConfigHandler.prefix + "container (time, user, wid, x, y, z, type, data, amount, metadata, action, rolled_back) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
|
||||||
String itemInsert = "INSERT INTO " + ConfigHandler.prefix + "item (time, user, wid, x, y, z, type, data, amount, action, rolled_back) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
|
String itemInsert = "INSERT INTO " + ConfigHandler.prefix + "item (time, user, wid, x, y, z, type, data, amount, action, rolled_back) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
|
||||||
String worldInsert = "INSERT INTO " + ConfigHandler.prefix + "world (id, world) VALUES (?, ?)";
|
String worldInsert = "INSERT INTO " + ConfigHandler.prefix + "world (id, world) VALUES (?, ?)";
|
||||||
String chatInsert = "INSERT INTO " + ConfigHandler.prefix + "chat (time, user, wid, x, y, z, message) VALUES (?, ?, ?, ?, ?, ?, ?)";
|
String chatInsert = "INSERT INTO " + ConfigHandler.prefix + "chat (time, user, wid, x, y, z, message) VALUES (?, ?, ?, ?, ?, ?, ?)";
|
||||||
@ -339,7 +332,7 @@ public class Database extends Queue {
|
|||||||
index = ", INDEX(time), INDEX(user,time), INDEX(wid,x,z,time)";
|
index = ", INDEX(time), INDEX(user,time), INDEX(wid,x,z,time)";
|
||||||
statement.executeUpdate("CREATE TABLE IF NOT EXISTS " + prefix + "command(rowid int(8) NOT NULL AUTO_INCREMENT,PRIMARY KEY(rowid),time int(10), user int(8), wid int(4), x int(8), y int (3), z int(8), message varchar(16000)" + index + ") ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4");
|
statement.executeUpdate("CREATE TABLE IF NOT EXISTS " + prefix + "command(rowid int(8) NOT NULL AUTO_INCREMENT,PRIMARY KEY(rowid),time int(10), user int(8), wid int(4), x int(8), y int (3), z int(8), message varchar(16000)" + index + ") ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4");
|
||||||
index = ", INDEX(wid,x,z,time), INDEX(user,time), INDEX(type,time)";
|
index = ", INDEX(wid,x,z,time), INDEX(user,time), INDEX(type,time)";
|
||||||
statement.executeUpdate("CREATE TABLE IF NOT EXISTS " + prefix + "container(rowid int(10) NOT NULL AUTO_INCREMENT,PRIMARY KEY(rowid), time int(10), user int(8), wid int(4), x int(8), y int(3), z int(8), type int(6), data int(6), amount int(4), metadata blob, action int(2), rolled_back tinyint(1), rolled_back_inventory tinyint(1)" + index + ") ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4");
|
statement.executeUpdate("CREATE TABLE IF NOT EXISTS " + prefix + "container(rowid int(10) NOT NULL AUTO_INCREMENT,PRIMARY KEY(rowid), time int(10), user int(8), wid int(4), x int(8), y int(3), z int(8), type int(6), data int(6), amount int(4), metadata blob, action int(2), rolled_back tinyint(1)" + index + ") ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4");
|
||||||
index = ", INDEX(wid,x,z,time), INDEX(user,time), INDEX(type,time)";
|
index = ", INDEX(wid,x,z,time), INDEX(user,time), INDEX(type,time)";
|
||||||
statement.executeUpdate("CREATE TABLE IF NOT EXISTS " + prefix + "item(rowid int(10) NOT NULL AUTO_INCREMENT,PRIMARY KEY(rowid), time int(10), user int(8), wid int(4), x int(8), y int(3), z int(8), type int(6), data blob, amount int(4), action tinyint(1), rolled_back tinyint(1)" + index + ") ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4");
|
statement.executeUpdate("CREATE TABLE IF NOT EXISTS " + prefix + "item(rowid int(10) NOT NULL AUTO_INCREMENT,PRIMARY KEY(rowid), time int(10), user int(8), wid int(4), x int(8), y int(3), z int(8), type int(6), data blob, amount int(4), action tinyint(1), rolled_back tinyint(1)" + index + ") ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4");
|
||||||
statement.executeUpdate("CREATE TABLE IF NOT EXISTS " + prefix + "database_lock(rowid int(8) NOT NULL AUTO_INCREMENT,PRIMARY KEY(rowid),status tinyint(1),time int(10)) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4");
|
statement.executeUpdate("CREATE TABLE IF NOT EXISTS " + prefix + "database_lock(rowid int(8) NOT NULL AUTO_INCREMENT,PRIMARY KEY(rowid),status tinyint(1),time int(10)) ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4");
|
||||||
@ -417,7 +410,7 @@ public class Database extends Queue {
|
|||||||
statement.executeUpdate("CREATE TABLE IF NOT EXISTS " + prefix + "command (time INTEGER, user INTEGER, wid INTEGER, x INTEGER, y INTEGER, z INTEGER, message TEXT);");
|
statement.executeUpdate("CREATE TABLE IF NOT EXISTS " + prefix + "command (time INTEGER, user INTEGER, wid INTEGER, x INTEGER, y INTEGER, z INTEGER, message TEXT);");
|
||||||
}
|
}
|
||||||
if (!tableData.contains(prefix + "container")) {
|
if (!tableData.contains(prefix + "container")) {
|
||||||
statement.executeUpdate("CREATE TABLE IF NOT EXISTS " + prefix + "container (time INTEGER, user INTEGER, wid INTEGER, x INTEGER, y INTEGER, z INTEGER, type INTEGER, data INTEGER, amount INTEGER, metadata BLOB, action INTEGER, rolled_back INTEGER, rolled_back_inventory INTEGER);");
|
statement.executeUpdate("CREATE TABLE IF NOT EXISTS " + prefix + "container (time INTEGER, user INTEGER, wid INTEGER, x INTEGER, y INTEGER, z INTEGER, type INTEGER, data INTEGER, amount INTEGER, metadata BLOB, action INTEGER, rolled_back INTEGER);");
|
||||||
}
|
}
|
||||||
if (!tableData.contains(prefix + "item")) {
|
if (!tableData.contains(prefix + "item")) {
|
||||||
statement.executeUpdate("CREATE TABLE IF NOT EXISTS " + prefix + "item (time INTEGER, user INTEGER, wid INTEGER, x INTEGER, y INTEGER, z INTEGER, type INTEGER, data BLOB, amount INTEGER, action INTEGER, rolled_back INTEGER);");
|
statement.executeUpdate("CREATE TABLE IF NOT EXISTS " + prefix + "item (time INTEGER, user INTEGER, wid INTEGER, x INTEGER, y INTEGER, z INTEGER, type INTEGER, data BLOB, amount INTEGER, action INTEGER, rolled_back INTEGER);");
|
||||||
|
@ -297,6 +297,7 @@ public class Lookup extends Queue {
|
|||||||
restrictWorld = true;
|
restrictWorld = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean inventoryQuery = (actionList.contains(4) && actionList.contains(11));
|
||||||
boolean validAction = false;
|
boolean validAction = false;
|
||||||
String queryBlock = "";
|
String queryBlock = "";
|
||||||
String queryEntity = "";
|
String queryEntity = "";
|
||||||
@ -530,7 +531,7 @@ public class Lookup extends Queue {
|
|||||||
if (validAction) {
|
if (validAction) {
|
||||||
queryBlock = queryBlock + " action IN(" + action + ") AND";
|
queryBlock = queryBlock + " action IN(" + action + ") AND";
|
||||||
}
|
}
|
||||||
else if (includeBlock.length() > 0 || includeEntity.length() > 0 || excludeBlock.length() > 0 || excludeEntity.length() > 0) {
|
else if (inventoryQuery || includeBlock.length() > 0 || includeEntity.length() > 0 || excludeBlock.length() > 0 || excludeEntity.length() > 0) {
|
||||||
queryBlock = queryBlock + " action NOT IN(-1) AND";
|
queryBlock = queryBlock + " action NOT IN(-1) AND";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -666,23 +667,36 @@ public class Lookup extends Queue {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean itemLookup = (actionList.contains(4) && actionList.contains(11));
|
boolean itemLookup = inventoryQuery;
|
||||||
if (lookup && actionList.size() == 0) {
|
if ((lookup && actionList.size() == 0) || (itemLookup && !actionList.contains(0))) {
|
||||||
if (!count) {
|
if (!count) {
|
||||||
rows = "rowid as id,time,user,wid,x,y,z,type,meta as metadata,data,-1 as amount,action,rolled_back";
|
rows = "rowid as id,time,user,wid,x,y,z,type,meta as metadata,data,-1 as amount,action,rolled_back";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (inventoryQuery) {
|
||||||
|
if (validAction) {
|
||||||
|
baseQuery = baseQuery.replace("action IN(" + action + ")", "action IN(1)");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
baseQuery = baseQuery.replace("action NOT IN(-1)", "action IN(1)");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!count) {
|
||||||
|
rows = "rowid as id,time,user,wid,x,y,z,type,meta as metadata,data,1 as amount,action,rolled_back";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (includeBlock.length() > 0 || excludeBlock.length() > 0) {
|
if (includeBlock.length() > 0 || excludeBlock.length() > 0) {
|
||||||
baseQuery = baseQuery.replace("action NOT IN(-1)", "action NOT IN(3)"); // if block specified for include/exclude, filter out entity data
|
baseQuery = baseQuery.replace("action NOT IN(-1)", "action NOT IN(3)"); // if block specified for include/exclude, filter out entity data
|
||||||
}
|
}
|
||||||
|
|
||||||
query = unionSelect + "SELECT " + "'0' as tbl," + rows + " FROM " + ConfigHandler.prefix + queryTable + " " + index + "WHERE" + baseQuery + unionLimit + ") UNION ALL ";
|
query = unionSelect + "SELECT " + "'0' as tbl," + rows + " FROM " + ConfigHandler.prefix + "block " + index + "WHERE" + baseQuery + unionLimit + ") UNION ALL ";
|
||||||
itemLookup = true;
|
itemLookup = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (itemLookup) {
|
if (itemLookup) {
|
||||||
if (!count) {
|
if (!count) {
|
||||||
rows = "rowid as id,time,user,wid,x,y,z,type,metadata,data,amount,action,rolled_back_inventory as rolled_back";
|
rows = "rowid as id,time,user,wid,x,y,z,type,metadata,data,amount,action,rolled_back";
|
||||||
}
|
}
|
||||||
query = query + unionSelect + "SELECT " + "'1' as tbl," + rows + " FROM " + ConfigHandler.prefix + "container WHERE" + queryBlock + unionLimit + ") UNION ALL ";
|
query = query + unionSelect + "SELECT " + "'1' as tbl," + rows + " FROM " + ConfigHandler.prefix + "container WHERE" + queryBlock + unionLimit + ") UNION ALL ";
|
||||||
|
|
||||||
@ -735,7 +749,7 @@ public class Lookup extends Queue {
|
|||||||
int z = block.getZ();
|
int z = block.getZ();
|
||||||
int time = (int) (System.currentTimeMillis() / 1000L);
|
int time = (int) (System.currentTimeMillis() / 1000L);
|
||||||
int worldId = Util.getWorldId(block.getWorld().getName());
|
int worldId = Util.getWorldId(block.getWorld().getName());
|
||||||
String query = "SELECT user,type FROM " + ConfigHandler.prefix + "block WHERE wid = '" + worldId + "' AND x = '" + x + "' AND z = '" + z + "' AND y = '" + y + "' AND rolled_back = '0' AND action='1' ORDER BY rowid DESC LIMIT 0, 1";
|
String query = "SELECT user,type FROM " + ConfigHandler.prefix + "block WHERE wid = '" + worldId + "' AND x = '" + x + "' AND z = '" + z + "' AND y = '" + y + "' AND rolled_back IN(0,2) AND action='1' ORDER BY rowid DESC LIMIT 0, 1";
|
||||||
|
|
||||||
ResultSet results = statement.executeQuery(query);
|
ResultSet results = statement.executeQuery(query);
|
||||||
while (results.next()) {
|
while (results.next()) {
|
||||||
|
@ -252,6 +252,7 @@ public class Rollback extends Queue {
|
|||||||
// Perform update transaction(s) in consumer
|
// Perform update transaction(s) in consumer
|
||||||
if (preview == 0) {
|
if (preview == 0) {
|
||||||
if (actionList.contains(11)) {
|
if (actionList.contains(11)) {
|
||||||
|
List<Object[]> blockList = new ArrayList<>();
|
||||||
List<Object[]> inventoryList = new ArrayList<>();
|
List<Object[]> inventoryList = new ArrayList<>();
|
||||||
List<Object[]> containerList = new ArrayList<>();
|
List<Object[]> containerList = new ArrayList<>();
|
||||||
for (Object[] data : itemList) {
|
for (Object[] data : itemList) {
|
||||||
@ -259,12 +260,16 @@ public class Rollback extends Queue {
|
|||||||
if (table == 2) { // item
|
if (table == 2) { // item
|
||||||
inventoryList.add(data);
|
inventoryList.add(data);
|
||||||
}
|
}
|
||||||
else {
|
else if (table == 1) { // container
|
||||||
containerList.add(data);
|
containerList.add(data);
|
||||||
}
|
}
|
||||||
|
else { // block
|
||||||
|
blockList.add(data);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Queue.queueRollbackUpdate(userString, location, inventoryList, Process.INVENTORY_ROLLBACK_UPDATE, rollbackType);
|
Queue.queueRollbackUpdate(userString, location, inventoryList, Process.INVENTORY_ROLLBACK_UPDATE, rollbackType);
|
||||||
Queue.queueRollbackUpdate(userString, location, containerList, Process.INVENTORY_CONTAINER_ROLLBACK_UPDATE, rollbackType);
|
Queue.queueRollbackUpdate(userString, location, containerList, Process.INVENTORY_CONTAINER_ROLLBACK_UPDATE, rollbackType);
|
||||||
|
Queue.queueRollbackUpdate(userString, location, blockList, Process.BLOCK_INVENTORY_ROLLBACK_UPDATE, rollbackType);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Queue.queueRollbackUpdate(userString, location, lookupList, Process.ROLLBACK_UPDATE, rollbackType);
|
Queue.queueRollbackUpdate(userString, location, lookupList, Process.ROLLBACK_UPDATE, rollbackType);
|
||||||
@ -320,7 +325,7 @@ public class Rollback extends Queue {
|
|||||||
int rowTypeRaw = (Integer) row[6];
|
int rowTypeRaw = (Integer) row[6];
|
||||||
int rowData = (Integer) row[7];
|
int rowData = (Integer) row[7];
|
||||||
int rowAction = (Integer) row[8];
|
int rowAction = (Integer) row[8];
|
||||||
int rowRolledBack = (Integer) row[9];
|
int rowRolledBack = Util.rolledBack((Integer) row[9], false);
|
||||||
int rowWorldId = (Integer) row[10];
|
int rowWorldId = (Integer) row[10];
|
||||||
byte[] rowMeta = (byte[]) row[12];
|
byte[] rowMeta = (byte[]) row[12];
|
||||||
byte[] rowBlockData = (byte[]) row[13];
|
byte[] rowBlockData = (byte[]) row[13];
|
||||||
@ -1023,14 +1028,15 @@ public class Rollback extends Queue {
|
|||||||
int rowTypeRaw = (Integer) row[6];
|
int rowTypeRaw = (Integer) row[6];
|
||||||
int rowData = (Integer) row[7];
|
int rowData = (Integer) row[7];
|
||||||
int rowAction = (Integer) row[8];
|
int rowAction = (Integer) row[8];
|
||||||
int rowRolledBack = (Integer) row[9];
|
int rowRolledBack = Util.rolledBack((Integer) row[9], false);
|
||||||
int rowWorldId = (Integer) row[10];
|
int rowWorldId = (Integer) row[10];
|
||||||
int rowAmount = (Integer) row[11];
|
int rowAmount = (Integer) row[11];
|
||||||
byte[] rowMetadata = (byte[]) row[12];
|
byte[] rowMetadata = (byte[]) row[12];
|
||||||
Material rowType = Util.getType(rowTypeRaw);
|
Material rowType = Util.getType(rowTypeRaw);
|
||||||
|
|
||||||
if (rowType != null && ((rollbackType == 0 && rowRolledBack == 0) || (rollbackType == 1 && rowRolledBack == 1))) {
|
int rolledBackInventory = Util.rolledBack((Integer) row[9], true);
|
||||||
if (inventoryRollback) {
|
if (rowType != null) {
|
||||||
|
if (inventoryRollback && ((rollbackType == 0 && rolledBackInventory == 0) || (rollbackType == 1 && rolledBackInventory == 1))) {
|
||||||
int rowUserId = (Integer) row[2];
|
int rowUserId = (Integer) row[2];
|
||||||
String rowUser = ConfigHandler.playerIdCacheReversed.get(rowUserId);
|
String rowUser = ConfigHandler.playerIdCacheReversed.get(rowUserId);
|
||||||
if (rowUser == null) {
|
if (rowUser == null) {
|
||||||
@ -1071,77 +1077,79 @@ public class Rollback extends Queue {
|
|||||||
continue; // remove this for merged rollbacks in future? (be sure to re-enable chunk sorting)
|
continue; // remove this for merged rollbacks in future? (be sure to re-enable chunk sorting)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rowAction > 1) {
|
if (inventoryRollback || rowAction > 1) {
|
||||||
continue; // skip inventory & ender chest transactions
|
continue; // skip inventory & ender chest transactions
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemStack itemstack = new ItemStack(rowType, rowAmount, (short) rowData);
|
if ((rollbackType == 0 && rowRolledBack == 0) || (rollbackType == 1 && rowRolledBack == 1)) {
|
||||||
Object[] populatedStack = populateItemStack(itemstack, rowMetadata);
|
ItemStack itemstack = new ItemStack(rowType, rowAmount, (short) rowData);
|
||||||
String faceData = (String) populatedStack[1];
|
Object[] populatedStack = populateItemStack(itemstack, rowMetadata);
|
||||||
|
String faceData = (String) populatedStack[1];
|
||||||
|
|
||||||
if (!containerInit || rowX != lastX || rowY != lastY || rowZ != lastZ || rowWorldId != lastWorldId || !faceData.equals(lastFace)) {
|
if (!containerInit || rowX != lastX || rowY != lastY || rowZ != lastZ || rowWorldId != lastWorldId || !faceData.equals(lastFace)) {
|
||||||
container = null; // container patch 2.14.0
|
container = null; // container patch 2.14.0
|
||||||
String world = Util.getWorldName(rowWorldId);
|
String world = Util.getWorldName(rowWorldId);
|
||||||
if (world.length() == 0) {
|
if (world.length() == 0) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
World bukkitWorld = Bukkit.getServer().getWorld(world);
|
World bukkitWorld = Bukkit.getServer().getWorld(world);
|
||||||
if (bukkitWorld == null) {
|
if (bukkitWorld == null) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
Block block = bukkitWorld.getBlockAt(rowX, rowY, rowZ);
|
Block block = bukkitWorld.getBlockAt(rowX, rowY, rowZ);
|
||||||
if (!bukkitWorld.isChunkLoaded(block.getChunk())) {
|
if (!bukkitWorld.isChunkLoaded(block.getChunk())) {
|
||||||
bukkitWorld.getChunkAt(block.getLocation());
|
bukkitWorld.getChunkAt(block.getLocation());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (BlockGroup.CONTAINERS.contains(block.getType())) {
|
if (BlockGroup.CONTAINERS.contains(block.getType())) {
|
||||||
container = Util.getContainerInventory(block.getState(), false);
|
container = Util.getContainerInventory(block.getState(), false);
|
||||||
containerType = block.getType();
|
containerType = block.getType();
|
||||||
}
|
}
|
||||||
else if (BlockGroup.CONTAINERS.contains(Material.ARMOR_STAND) || BlockGroup.CONTAINERS.contains(Material.ITEM_FRAME)) {
|
else if (BlockGroup.CONTAINERS.contains(Material.ARMOR_STAND) || BlockGroup.CONTAINERS.contains(Material.ITEM_FRAME)) {
|
||||||
BlockFace blockFace = BlockFace.valueOf(faceData);
|
BlockFace blockFace = BlockFace.valueOf(faceData);
|
||||||
for (Entity entity : block.getChunk().getEntities()) {
|
for (Entity entity : block.getChunk().getEntities()) {
|
||||||
if (entity.getLocation().getBlockX() == rowX && entity.getLocation().getBlockY() == rowY && entity.getLocation().getBlockZ() == rowZ) {
|
if (entity.getLocation().getBlockX() == rowX && entity.getLocation().getBlockY() == rowY && entity.getLocation().getBlockZ() == rowZ) {
|
||||||
if (entity instanceof ArmorStand) {
|
if (entity instanceof ArmorStand) {
|
||||||
container = Util.getEntityEquipment((LivingEntity) entity);
|
container = Util.getEntityEquipment((LivingEntity) entity);
|
||||||
containerType = Material.ARMOR_STAND;
|
containerType = Material.ARMOR_STAND;
|
||||||
}
|
}
|
||||||
else if (entity instanceof ItemFrame) {
|
else if (entity instanceof ItemFrame) {
|
||||||
container = entity;
|
container = entity;
|
||||||
containerType = Material.ITEM_FRAME;
|
containerType = Material.ITEM_FRAME;
|
||||||
if (blockFace == ((ItemFrame) entity).getFacing()) {
|
if (blockFace == ((ItemFrame) entity).getFacing()) {
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lastX = rowX;
|
||||||
|
lastY = rowY;
|
||||||
|
lastZ = rowZ;
|
||||||
|
lastWorldId = rowWorldId;
|
||||||
|
lastFace = faceData;
|
||||||
}
|
}
|
||||||
|
|
||||||
lastX = rowX;
|
if (container != null) {
|
||||||
lastY = rowY;
|
int action = 0;
|
||||||
lastZ = rowZ;
|
if (rollbackType == 0 && rowAction == 0) {
|
||||||
lastWorldId = rowWorldId;
|
action = 1;
|
||||||
lastFace = faceData;
|
}
|
||||||
|
|
||||||
|
if (rollbackType == 1 && rowAction == 1) {
|
||||||
|
action = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int slot = (Integer) populatedStack[0];
|
||||||
|
itemstack = (ItemStack) populatedStack[2];
|
||||||
|
|
||||||
|
modifyContainerItems(containerType, container, slot, itemstack, action);
|
||||||
|
itemCount1 = itemCount1 + rowAmount;
|
||||||
|
}
|
||||||
|
containerInit = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (container != null) {
|
|
||||||
int action = 0;
|
|
||||||
if (rollbackType == 0 && rowAction == 0) {
|
|
||||||
action = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rollbackType == 1 && rowAction == 1) {
|
|
||||||
action = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int slot = (Integer) populatedStack[0];
|
|
||||||
itemstack = (ItemStack) populatedStack[2];
|
|
||||||
|
|
||||||
modifyContainerItems(containerType, container, slot, itemstack, action);
|
|
||||||
itemCount1 = itemCount1 + rowAmount;
|
|
||||||
}
|
|
||||||
containerInit = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ConfigHandler.rollbackHash.put(finalUserString, new int[] { itemCount1, blockCount1, entityCount1, 0 });
|
ConfigHandler.rollbackHash.put(finalUserString, new int[] { itemCount1, blockCount1, entityCount1, 0 });
|
||||||
|
@ -104,7 +104,7 @@ public class BlockLookup {
|
|||||||
}
|
}
|
||||||
|
|
||||||
String rbFormat = "";
|
String rbFormat = "";
|
||||||
if (resultRolledBack == 1) {
|
if (resultRolledBack == 1 || resultRolledBack == 3) {
|
||||||
rbFormat = Color.STRIKETHROUGH;
|
rbFormat = Color.STRIKETHROUGH;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -97,7 +97,7 @@ public class ChestTransactionLookup {
|
|||||||
String selector = (resultAction != 0 ? Selector.FIRST : Selector.SECOND);
|
String selector = (resultAction != 0 ? Selector.FIRST : Selector.SECOND);
|
||||||
String tag = (resultAction != 0 ? Color.GREEN + "+" : Color.RED + "-");
|
String tag = (resultAction != 0 ? Color.GREEN + "+" : Color.RED + "-");
|
||||||
String rbFormat = "";
|
String rbFormat = "";
|
||||||
if (resultRolledBack == 1) {
|
if (resultRolledBack == 1 || resultRolledBack == 3) {
|
||||||
rbFormat = Color.STRIKETHROUGH;
|
rbFormat = Color.STRIKETHROUGH;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -88,7 +88,7 @@ public class InteractionLookup {
|
|||||||
found = true;
|
found = true;
|
||||||
|
|
||||||
String rbFormat = "";
|
String rbFormat = "";
|
||||||
if (resultRolledBack == 1) {
|
if (resultRolledBack == 1 || resultRolledBack == 3) {
|
||||||
rbFormat = Color.STRIKETHROUGH;
|
rbFormat = Color.STRIKETHROUGH;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,7 +25,6 @@ public class ContainerStatement {
|
|||||||
preparedStmt.setObject(10, byteData);
|
preparedStmt.setObject(10, byteData);
|
||||||
preparedStmt.setInt(11, action);
|
preparedStmt.setInt(11, action);
|
||||||
preparedStmt.setInt(12, rolledBack);
|
preparedStmt.setInt(12, rolledBack);
|
||||||
preparedStmt.setInt(13, 0); // rolled_back_inventory
|
|
||||||
preparedStmt.addBatch();
|
preparedStmt.addBatch();
|
||||||
|
|
||||||
if (batchCount > 0 && batchCount % 1000 == 0) {
|
if (batchCount > 0 && batchCount % 1000 == 0) {
|
||||||
|
@ -21,17 +21,6 @@ public class __2_21_0 {
|
|||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
Chat.console(Phrase.build(Phrase.PATCH_SKIP_UPDATE, ConfigHandler.prefix + "item", Selector.FIRST, Selector.FIRST));
|
Chat.console(Phrase.build(Phrase.PATCH_SKIP_UPDATE, ConfigHandler.prefix + "item", Selector.FIRST, Selector.FIRST));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Patch.continuePatch()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
statement.executeUpdate("ALTER TABLE " + ConfigHandler.prefix + "container ADD COLUMN rolled_back_inventory tinyint(1) DEFAULT 0;");
|
|
||||||
}
|
|
||||||
catch (Exception e) {
|
|
||||||
Chat.console(Phrase.build(Phrase.PATCH_SKIP_UPDATE, ConfigHandler.prefix + "container", Selector.FIRST, Selector.FIRST));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
try {
|
try {
|
||||||
@ -40,17 +29,6 @@ public class __2_21_0 {
|
|||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
Chat.console(Phrase.build(Phrase.PATCH_SKIP_UPDATE, ConfigHandler.prefix + "item", Selector.FIRST, Selector.FIRST));
|
Chat.console(Phrase.build(Phrase.PATCH_SKIP_UPDATE, ConfigHandler.prefix + "item", Selector.FIRST, Selector.FIRST));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Patch.continuePatch()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
statement.executeUpdate("ALTER TABLE " + ConfigHandler.prefix + "container ADD COLUMN rolled_back_inventory INTEGER DEFAULT 0;");
|
|
||||||
}
|
|
||||||
catch (Exception e) {
|
|
||||||
Chat.console(Phrase.build(Phrase.PATCH_SKIP_UPDATE, ConfigHandler.prefix + "container", Selector.FIRST, Selector.FIRST));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Patch.continuePatch()) {
|
if (!Patch.continuePatch()) {
|
||||||
|
@ -1421,4 +1421,29 @@ public class Util extends Queue {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static int rolledBack(int rolledBack, boolean isInventory) {
|
||||||
|
switch (rolledBack) {
|
||||||
|
case 1: // just block rolled back
|
||||||
|
return isInventory ? 0 : 1;
|
||||||
|
case 2: // just inventory rolled back
|
||||||
|
return isInventory ? 1 : 0;
|
||||||
|
case 3: // block and inventory rolled back
|
||||||
|
return 1;
|
||||||
|
default: // no rollbacks
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int toggleRolledBack(int rolledBack, boolean isInventory) {
|
||||||
|
switch (rolledBack) {
|
||||||
|
case 1: // just block rolled back
|
||||||
|
return isInventory ? 3 : 0;
|
||||||
|
case 2: // just inventory rolled back
|
||||||
|
return isInventory ? 0 : 3;
|
||||||
|
case 3: // block and inventory rolled back
|
||||||
|
return isInventory ? 1 : 2;
|
||||||
|
default: // no rollbacks
|
||||||
|
return isInventory ? 2 : 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user