Changed doors and beds to no longer log data as two separate blocks
This commit is contained in:
parent
f9083053b2
commit
262f27da3e
6 changed files with 106 additions and 170 deletions
|
|
@ -726,6 +726,13 @@ public class Rollback extends Queue {
|
|||
}
|
||||
}
|
||||
}
|
||||
else if (changeBlockData instanceof Bed) {
|
||||
Bed bed = (Bed) changeBlockData;
|
||||
if (bed.getPart() == Part.FOOT) {
|
||||
Block adjacentBlock = block.getRelative(bed.getFacing());
|
||||
Util.prepareTypeAndData(chunkChanges, adjacentBlock, rowType, null, false);
|
||||
}
|
||||
}
|
||||
|
||||
Util.prepareTypeAndData(chunkChanges, block, rowType, null, physics);
|
||||
}
|
||||
|
|
@ -817,83 +824,73 @@ public class Rollback extends Queue {
|
|||
else if ((rowType == Material.NETHER_PORTAL) && rowAction == 0) {
|
||||
Util.prepareTypeAndData(chunkChanges, block, Material.FIRE, null, true);
|
||||
}
|
||||
else if (rowType == Material.IRON_DOOR || BlockGroup.DOORS.contains(rowType)) {
|
||||
else if (blockData == null && rowData > 0 && (rowType == Material.IRON_DOOR || BlockGroup.DOORS.contains(rowType))) {
|
||||
if (countBlock) {
|
||||
blockCount1++;
|
||||
}
|
||||
|
||||
if (blockData != null) {
|
||||
Util.prepareTypeAndData(chunkChanges, block, rowType, blockData, false);
|
||||
block.setType(rowType, false);
|
||||
Door door = (Door) block.getBlockData();
|
||||
if (rowData >= 8) {
|
||||
door.setHalf(Half.TOP);
|
||||
rowData = rowData - 8;
|
||||
}
|
||||
else {
|
||||
block.setType(rowType, false);
|
||||
Door door = (Door) block.getBlockData();
|
||||
if (rowData >= 8) {
|
||||
door.setHalf(Half.TOP);
|
||||
rowData = rowData - 8;
|
||||
}
|
||||
else {
|
||||
door.setHalf(Half.BOTTOM);
|
||||
}
|
||||
if (rowData >= 4) {
|
||||
door.setHinge(Hinge.RIGHT);
|
||||
rowData = rowData - 4;
|
||||
}
|
||||
else {
|
||||
door.setHinge(Hinge.LEFT);
|
||||
}
|
||||
BlockFace face = BlockFace.NORTH;
|
||||
|
||||
switch (rowData) {
|
||||
case 0:
|
||||
face = BlockFace.EAST;
|
||||
break;
|
||||
case 1:
|
||||
face = BlockFace.SOUTH;
|
||||
break;
|
||||
case 2:
|
||||
face = BlockFace.WEST;
|
||||
break;
|
||||
}
|
||||
|
||||
door.setFacing(face);
|
||||
door.setOpen(false);
|
||||
block.setBlockData(door, false);
|
||||
door.setHalf(Half.BOTTOM);
|
||||
}
|
||||
if (rowData >= 4) {
|
||||
door.setHinge(Hinge.RIGHT);
|
||||
rowData = rowData - 4;
|
||||
}
|
||||
else {
|
||||
door.setHinge(Hinge.LEFT);
|
||||
}
|
||||
BlockFace face = BlockFace.NORTH;
|
||||
|
||||
switch (rowData) {
|
||||
case 0:
|
||||
face = BlockFace.EAST;
|
||||
break;
|
||||
case 1:
|
||||
face = BlockFace.SOUTH;
|
||||
break;
|
||||
case 2:
|
||||
face = BlockFace.WEST;
|
||||
break;
|
||||
}
|
||||
|
||||
door.setFacing(face);
|
||||
door.setOpen(false);
|
||||
block.setBlockData(door, false);
|
||||
}
|
||||
else if (rowType.name().endsWith("_BED")) {
|
||||
else if (blockData == null && rowData > 0 && (rowType.name().endsWith("_BED"))) {
|
||||
if (countBlock) {
|
||||
blockCount1++;
|
||||
}
|
||||
|
||||
if (blockData != null) {
|
||||
Util.prepareTypeAndData(chunkChanges, block, rowType, blockData, false);
|
||||
block.setType(rowType, false);
|
||||
Bed bed = (Bed) block.getBlockData();
|
||||
BlockFace face = BlockFace.NORTH;
|
||||
|
||||
if (rowData > 4) {
|
||||
bed.setPart(Part.HEAD);
|
||||
rowData = rowData - 4;
|
||||
}
|
||||
else {
|
||||
block.setType(rowType, false);
|
||||
Bed bed = (Bed) block.getBlockData();
|
||||
BlockFace face = BlockFace.NORTH;
|
||||
|
||||
if (rowData > 4) {
|
||||
bed.setPart(Part.HEAD);
|
||||
rowData = rowData - 4;
|
||||
}
|
||||
|
||||
switch (rowData) {
|
||||
case 2:
|
||||
face = BlockFace.WEST;
|
||||
break;
|
||||
case 3:
|
||||
face = BlockFace.EAST;
|
||||
break;
|
||||
case 4:
|
||||
face = BlockFace.SOUTH;
|
||||
break;
|
||||
}
|
||||
|
||||
bed.setFacing(face);
|
||||
block.setBlockData(bed, false);
|
||||
switch (rowData) {
|
||||
case 2:
|
||||
face = BlockFace.WEST;
|
||||
break;
|
||||
case 3:
|
||||
face = BlockFace.EAST;
|
||||
break;
|
||||
case 4:
|
||||
face = BlockFace.SOUTH;
|
||||
break;
|
||||
}
|
||||
|
||||
bed.setFacing(face);
|
||||
block.setBlockData(bed, false);
|
||||
}
|
||||
else if (rowType.name().endsWith("_BANNER")) {
|
||||
Util.prepareTypeAndData(chunkChanges, block, rowType, blockData, false);
|
||||
|
|
@ -964,6 +961,23 @@ public class Rollback extends Queue {
|
|||
blockCount1++;
|
||||
}
|
||||
}
|
||||
else if (rowType != Material.AIR && rawBlockData instanceof Bed) {
|
||||
Bed bed = (Bed) rawBlockData;
|
||||
if (bed.getPart() == Part.FOOT) {
|
||||
Block adjacentBlock = block.getRelative(bed.getFacing());
|
||||
Bed bedData = (Bed) rawBlockData.clone();
|
||||
bedData.setPart(Part.HEAD);
|
||||
Util.prepareTypeAndData(chunkChanges, adjacentBlock, rowType, bedData, false);
|
||||
if (countBlock) {
|
||||
blockCount1++;
|
||||
}
|
||||
}
|
||||
|
||||
Util.prepareTypeAndData(chunkChanges, block, rowType, blockData, true);
|
||||
if (countBlock) {
|
||||
blockCount1++;
|
||||
}
|
||||
}
|
||||
else {
|
||||
boolean physics = true;
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -5,12 +5,7 @@ import java.util.List;
|
|||
import java.util.Locale;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.BlockFace;
|
||||
import org.bukkit.block.BlockState;
|
||||
import org.bukkit.block.data.BlockData;
|
||||
import org.bukkit.block.data.type.Bed;
|
||||
import org.bukkit.block.data.type.Door;
|
||||
import org.bukkit.block.data.type.Door.Hinge;
|
||||
|
||||
import net.coreprotect.CoreProtect;
|
||||
import net.coreprotect.bukkit.BukkitAdapter;
|
||||
|
|
@ -18,7 +13,6 @@ import net.coreprotect.config.ConfigHandler;
|
|||
import net.coreprotect.database.statement.BlockStatement;
|
||||
import net.coreprotect.database.statement.UserStatement;
|
||||
import net.coreprotect.event.CoreProtectPreLogEvent;
|
||||
import net.coreprotect.model.BlockGroup;
|
||||
import net.coreprotect.thread.CacheHandler;
|
||||
import net.coreprotect.utility.Util;
|
||||
|
||||
|
|
@ -68,97 +62,18 @@ public class BlockPlaceLogger {
|
|||
int x = block.getX();
|
||||
int y = block.getY();
|
||||
int z = block.getZ();
|
||||
int dx = x;
|
||||
int dy = y;
|
||||
int dz = z;
|
||||
Material doubletype = type;
|
||||
int doubledata = data;
|
||||
int logdouble = 0;
|
||||
|
||||
if (event.getUser().length() > 0) {
|
||||
CacheHandler.lookupCache.put("" + x + "." + y + "." + z + "." + wid + "", new Object[] { time, event.getUser(), type });
|
||||
}
|
||||
|
||||
String doubleBlockData = null;
|
||||
if (type.name().endsWith("_BED") || type == Material.IRON_DOOR || BlockGroup.DOORS.contains(type)) { // properly log double blocks (doors/beds)
|
||||
BlockData blockStateBlockData = block.getBlockData();
|
||||
if (blockStateBlockData instanceof Bed) {
|
||||
Bed bed = (Bed) blockStateBlockData;
|
||||
Bed.Part bedPart = bed.getPart();
|
||||
BlockFace face = bed.getFacing();
|
||||
|
||||
int bedData = 1;
|
||||
switch (face) {
|
||||
case WEST:
|
||||
dx = ((bedPart == Bed.Part.HEAD) ? (x + 1) : (x - 1));
|
||||
bedData = 2;
|
||||
break;
|
||||
case EAST:
|
||||
dx = ((bedPart == Bed.Part.HEAD) ? (x - 1) : (x + 1));
|
||||
bedData = 3;
|
||||
break;
|
||||
case SOUTH:
|
||||
dz = ((bedPart == Bed.Part.HEAD) ? (z - 1) : (z + 1));
|
||||
bedData = 4;
|
||||
break;
|
||||
default:
|
||||
dz = ((bedPart == Bed.Part.HEAD) ? (z + 1) : (z - 1));
|
||||
break;
|
||||
}
|
||||
|
||||
if (bedPart == Bed.Part.HEAD) {
|
||||
data = 4 + bedData;
|
||||
doubledata = bedData;
|
||||
bed.setPart(Bed.Part.FOOT);
|
||||
doubleBlockData = bed.getAsString();
|
||||
}
|
||||
else {
|
||||
data = bedData;
|
||||
doubledata = 4 + bedData;
|
||||
bed.setPart(Bed.Part.HEAD);
|
||||
doubleBlockData = bed.getAsString();
|
||||
}
|
||||
}
|
||||
else if (blockStateBlockData instanceof Door) {
|
||||
Door door = (Door) blockStateBlockData;
|
||||
BlockFace face = door.getFacing();
|
||||
Hinge hinge = door.getHinge();
|
||||
switch (face) {
|
||||
case EAST:
|
||||
data = 0;
|
||||
break;
|
||||
case SOUTH:
|
||||
data = 1;
|
||||
break;
|
||||
case WEST:
|
||||
data = 2;
|
||||
break;
|
||||
default:
|
||||
data = 3;
|
||||
break;
|
||||
}
|
||||
if (hinge.equals(Hinge.RIGHT)) {
|
||||
data = data + 4;
|
||||
}
|
||||
if (data < 8) {
|
||||
dy = y + 1;
|
||||
doubledata = data + 8;
|
||||
}
|
||||
}
|
||||
logdouble = 1;
|
||||
}
|
||||
|
||||
int internalType = Util.getBlockId(type.name(), true);
|
||||
int internalDoubleType = Util.getBlockId(doubletype.name(), true);
|
||||
|
||||
if (replacedType > 0 && Util.getType(replacedType) != Material.AIR && Util.getType(replacedType) != Material.CAVE_AIR) {
|
||||
BlockStatement.insert(preparedStmt, batchCount, time, userId, wid, x, y, z, replacedType, replacedData, null, replaceBlockData, 0, 0);
|
||||
}
|
||||
|
||||
BlockStatement.insert(preparedStmt, batchCount, time, userId, wid, x, y, z, internalType, data, meta, blockData, 1, 0);
|
||||
if (logdouble == 1) {
|
||||
BlockStatement.insert(preparedStmt, batchCount, time, userId, wid, dx, dy, dz, internalDoubleType, doubledata, null, doubleBlockData, 1, 0);
|
||||
}
|
||||
}
|
||||
catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue