geforkt von Mirrors/FastAsyncWorldEdit
Merge pull request #278 from sk89q/attachments
Fixed some bugs in the attachment information WE uses to reorder block changes.
Dieser Commit ist enthalten in:
Commit
a8f4013cbb
@ -766,6 +766,19 @@ public class EditSession {
|
|||||||
walked.addFirst(upperBlock);
|
walked.addFirst(upperBlock);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BlockID.MINECART_TRACKS:
|
||||||
|
case BlockID.POWERED_RAIL:
|
||||||
|
case BlockID.DETECTOR_RAIL:
|
||||||
|
case BlockID.ACTIVATOR_RAIL:
|
||||||
|
// Here, rails are hardcoded to be attached to the block below them.
|
||||||
|
// They're also attached to the block they're ascending towards via BlockType.getAttachment.
|
||||||
|
BlockVector lowerBlock = current.add(0, -1, 0).toBlockVector();
|
||||||
|
if (blocks.contains(lowerBlock) && !walked.contains(lowerBlock)) {
|
||||||
|
walked.addFirst(lowerBlock);
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
final PlayerDirection attachment = BlockType.getAttachment(type, data);
|
final PlayerDirection attachment = BlockType.getAttachment(type, data);
|
||||||
|
@ -1606,11 +1606,9 @@ public enum BlockType {
|
|||||||
private static final Map<Integer, PlayerDirection> nonDataAttachments = new HashMap<Integer, PlayerDirection>();
|
private static final Map<Integer, PlayerDirection> nonDataAttachments = new HashMap<Integer, PlayerDirection>();
|
||||||
static {
|
static {
|
||||||
nonDataAttachments.put(BlockID.SAPLING, PlayerDirection.DOWN);
|
nonDataAttachments.put(BlockID.SAPLING, PlayerDirection.DOWN);
|
||||||
nonDataAttachments.put(BlockID.POWERED_RAIL, PlayerDirection.DOWN);
|
|
||||||
nonDataAttachments.put(BlockID.DETECTOR_RAIL, PlayerDirection.DOWN);
|
|
||||||
nonDataAttachments.put(BlockID.LONG_GRASS, PlayerDirection.DOWN);
|
nonDataAttachments.put(BlockID.LONG_GRASS, PlayerDirection.DOWN);
|
||||||
nonDataAttachments.put(BlockID.DEAD_BUSH, PlayerDirection.DOWN);
|
nonDataAttachments.put(BlockID.DEAD_BUSH, PlayerDirection.DOWN);
|
||||||
for (int offset = 0; offset <= 8; offset += 8) {
|
for (int offset = 0; offset < 16; offset += 8) {
|
||||||
dataAttachments.put(typeDataKey(BlockID.PISTON_EXTENSION, offset + 0), PlayerDirection.UP);
|
dataAttachments.put(typeDataKey(BlockID.PISTON_EXTENSION, offset + 0), PlayerDirection.UP);
|
||||||
dataAttachments.put(typeDataKey(BlockID.PISTON_EXTENSION, offset + 1), PlayerDirection.DOWN);
|
dataAttachments.put(typeDataKey(BlockID.PISTON_EXTENSION, offset + 1), PlayerDirection.DOWN);
|
||||||
addCardinals(BlockID.PISTON_EXTENSION, offset + 2, offset + 5, offset + 3, offset + 4);
|
addCardinals(BlockID.PISTON_EXTENSION, offset + 2, offset + 5, offset + 3, offset + 4);
|
||||||
@ -1620,7 +1618,8 @@ public enum BlockType {
|
|||||||
nonDataAttachments.put(BlockID.BROWN_MUSHROOM, PlayerDirection.DOWN);
|
nonDataAttachments.put(BlockID.BROWN_MUSHROOM, PlayerDirection.DOWN);
|
||||||
nonDataAttachments.put(BlockID.RED_MUSHROOM, PlayerDirection.DOWN);
|
nonDataAttachments.put(BlockID.RED_MUSHROOM, PlayerDirection.DOWN);
|
||||||
for (int blockId : new int[] { BlockID.TORCH, BlockID.REDSTONE_TORCH_ON, BlockID.REDSTONE_TORCH_OFF }) {
|
for (int blockId : new int[] { BlockID.TORCH, BlockID.REDSTONE_TORCH_ON, BlockID.REDSTONE_TORCH_OFF }) {
|
||||||
dataAttachments.put(typeDataKey(blockId, 5), PlayerDirection.DOWN);
|
dataAttachments.put(typeDataKey(blockId, 0), PlayerDirection.DOWN);
|
||||||
|
dataAttachments.put(typeDataKey(blockId, 5), PlayerDirection.DOWN); // According to the minecraft wiki, this one is history. Keeping both, for now...
|
||||||
addCardinals(blockId, 4, 1, 3, 2);
|
addCardinals(blockId, 4, 1, 3, 2);
|
||||||
}
|
}
|
||||||
nonDataAttachments.put(BlockID.REDSTONE_WIRE, PlayerDirection.DOWN);
|
nonDataAttachments.put(BlockID.REDSTONE_WIRE, PlayerDirection.DOWN);
|
||||||
@ -1628,18 +1627,19 @@ public enum BlockType {
|
|||||||
nonDataAttachments.put(BlockID.SIGN_POST, PlayerDirection.DOWN);
|
nonDataAttachments.put(BlockID.SIGN_POST, PlayerDirection.DOWN);
|
||||||
nonDataAttachments.put(BlockID.WOODEN_DOOR, PlayerDirection.DOWN);
|
nonDataAttachments.put(BlockID.WOODEN_DOOR, PlayerDirection.DOWN);
|
||||||
addCardinals(BlockID.LADDER, 2, 5, 3, 4);
|
addCardinals(BlockID.LADDER, 2, 5, 3, 4);
|
||||||
nonDataAttachments.put(BlockID.MINECART_TRACKS, PlayerDirection.DOWN);
|
|
||||||
addCardinals(BlockID.WALL_SIGN, 2, 5, 3, 4);
|
addCardinals(BlockID.WALL_SIGN, 2, 5, 3, 4);
|
||||||
for (int offset = 0; offset <= 8; offset += 8) {
|
for (int offset = 0; offset < 16; offset += 8) {
|
||||||
addCardinals(BlockID.LEVER, offset + 4, offset + 1, offset + 3, offset + 2);
|
addCardinals(BlockID.LEVER, offset + 4, offset + 1, offset + 3, offset + 2);
|
||||||
dataAttachments.put(typeDataKey(BlockID.LEVER, offset + 5), PlayerDirection.DOWN);
|
dataAttachments.put(typeDataKey(BlockID.LEVER, offset + 5), PlayerDirection.DOWN);
|
||||||
dataAttachments.put(typeDataKey(BlockID.LEVER, offset + 6), PlayerDirection.DOWN);
|
dataAttachments.put(typeDataKey(BlockID.LEVER, offset + 6), PlayerDirection.DOWN);
|
||||||
|
dataAttachments.put(typeDataKey(BlockID.LEVER, offset + 7), PlayerDirection.UP);
|
||||||
|
dataAttachments.put(typeDataKey(BlockID.LEVER, offset + 0), PlayerDirection.UP);
|
||||||
}
|
}
|
||||||
nonDataAttachments.put(BlockID.STONE_PRESSURE_PLATE, PlayerDirection.DOWN);
|
nonDataAttachments.put(BlockID.STONE_PRESSURE_PLATE, PlayerDirection.DOWN);
|
||||||
nonDataAttachments.put(BlockID.IRON_DOOR, PlayerDirection.DOWN);
|
nonDataAttachments.put(BlockID.IRON_DOOR, PlayerDirection.DOWN);
|
||||||
nonDataAttachments.put(BlockID.WOODEN_PRESSURE_PLATE, PlayerDirection.DOWN);
|
nonDataAttachments.put(BlockID.WOODEN_PRESSURE_PLATE, PlayerDirection.DOWN);
|
||||||
// redstone torches: see torches
|
// redstone torches: see torches
|
||||||
for (int offset = 0; offset <= 8; offset += 8) {
|
for (int offset = 0; offset < 16; offset += 8) {
|
||||||
addCardinals(BlockID.STONE_BUTTON, offset + 4, offset + 1, offset + 3, offset + 2);
|
addCardinals(BlockID.STONE_BUTTON, offset + 4, offset + 1, offset + 3, offset + 2);
|
||||||
addCardinals(BlockID.WOODEN_BUTTON, offset + 4, offset + 1, offset + 3, offset + 2);
|
addCardinals(BlockID.WOODEN_BUTTON, offset + 4, offset + 1, offset + 3, offset + 2);
|
||||||
}
|
}
|
||||||
@ -1648,7 +1648,7 @@ public enum BlockType {
|
|||||||
nonDataAttachments.put(BlockID.CAKE_BLOCK, PlayerDirection.DOWN);
|
nonDataAttachments.put(BlockID.CAKE_BLOCK, PlayerDirection.DOWN);
|
||||||
nonDataAttachments.put(BlockID.REDSTONE_REPEATER_OFF, PlayerDirection.DOWN);
|
nonDataAttachments.put(BlockID.REDSTONE_REPEATER_OFF, PlayerDirection.DOWN);
|
||||||
nonDataAttachments.put(BlockID.REDSTONE_REPEATER_ON, PlayerDirection.DOWN);
|
nonDataAttachments.put(BlockID.REDSTONE_REPEATER_ON, PlayerDirection.DOWN);
|
||||||
for (int offset = 0; offset <= 4; offset += 4) {
|
for (int offset = 0; offset < 16; offset += 4) {
|
||||||
addCardinals(BlockID.TRAP_DOOR, offset + 0, offset + 3, offset + 1, offset + 2);
|
addCardinals(BlockID.TRAP_DOOR, offset + 0, offset + 3, offset + 1, offset + 2);
|
||||||
}
|
}
|
||||||
nonDataAttachments.put(BlockID.PUMPKIN_STEM, PlayerDirection.DOWN);
|
nonDataAttachments.put(BlockID.PUMPKIN_STEM, PlayerDirection.DOWN);
|
||||||
@ -1657,10 +1657,10 @@ public enum BlockType {
|
|||||||
dataAttachments.put(typeDataKey(BlockID.VINE, 0), PlayerDirection.UP);
|
dataAttachments.put(typeDataKey(BlockID.VINE, 0), PlayerDirection.UP);
|
||||||
addCardinals(BlockID.VINE, 1, 2, 4, 8);
|
addCardinals(BlockID.VINE, 1, 2, 4, 8);
|
||||||
nonDataAttachments.put(BlockID.NETHER_WART, PlayerDirection.DOWN);
|
nonDataAttachments.put(BlockID.NETHER_WART, PlayerDirection.DOWN);
|
||||||
for (int offset = 0; offset <= 4; offset += 4) {
|
for (int offset = 0; offset < 16; offset += 4) {
|
||||||
addCardinals(BlockID.COCOA_PLANT, offset + 0, offset + 1, offset + 2, offset + 3);
|
addCardinals(BlockID.COCOA_PLANT, offset + 0, offset + 1, offset + 2, offset + 3);
|
||||||
}
|
}
|
||||||
for (int offset = 0; offset <= 4; offset += 4) {
|
for (int offset = 0; offset < 16; offset += 4) {
|
||||||
addCardinals(BlockID.TRIPWIRE_HOOK, offset + 2, offset + 3, offset + 0, offset + 1);
|
addCardinals(BlockID.TRIPWIRE_HOOK, offset + 2, offset + 3, offset + 0, offset + 1);
|
||||||
}
|
}
|
||||||
nonDataAttachments.put(BlockID.TRIPWIRE, PlayerDirection.DOWN);
|
nonDataAttachments.put(BlockID.TRIPWIRE, PlayerDirection.DOWN);
|
||||||
@ -1672,8 +1672,16 @@ public enum BlockType {
|
|||||||
nonDataAttachments.put(BlockID.PRESSURE_PLATE_HEAVY, PlayerDirection.DOWN);
|
nonDataAttachments.put(BlockID.PRESSURE_PLATE_HEAVY, PlayerDirection.DOWN);
|
||||||
nonDataAttachments.put(BlockID.COMPARATOR_OFF, PlayerDirection.DOWN);
|
nonDataAttachments.put(BlockID.COMPARATOR_OFF, PlayerDirection.DOWN);
|
||||||
nonDataAttachments.put(BlockID.COMPARATOR_ON, PlayerDirection.DOWN);
|
nonDataAttachments.put(BlockID.COMPARATOR_ON, PlayerDirection.DOWN);
|
||||||
nonDataAttachments.put(BlockID.ACTIVATOR_RAIL, PlayerDirection.DOWN);
|
|
||||||
nonDataAttachments.put(BlockID.CARPET, PlayerDirection.DOWN);
|
nonDataAttachments.put(BlockID.CARPET, PlayerDirection.DOWN);
|
||||||
|
|
||||||
|
// Rails are hardcoded to be attached to the block below them.
|
||||||
|
// In addition to that, let's attach ascending rails to the block they're ascending towards.
|
||||||
|
for (int offset = 0; offset < 16; offset += 8) {
|
||||||
|
addCardinals(BlockID.POWERED_RAIL, offset + 3, offset + 4, offset + 2, offset + 5);
|
||||||
|
addCardinals(BlockID.DETECTOR_RAIL, offset + 3, offset + 4, offset + 2, offset + 5);
|
||||||
|
addCardinals(BlockID.MINECART_TRACKS, offset + 3, offset + 4, offset + 2, offset + 5);
|
||||||
|
addCardinals(BlockID.ACTIVATOR_RAIL, offset + 3, offset + 4, offset + 2, offset + 5);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren