Mirror von
https://github.com/IntellectualSites/FastAsyncWorldEdit.git
synchronisiert 2024-09-07 00:22:51 +02:00
Fix button rotation, add support for up/down flipping and restore unit test functionality.
Dieser Commit ist enthalten in:
Ursprung
ec9c77c31b
Commit
ddc741147e
@ -95,12 +95,22 @@ public final class BlockData {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BlockID.LEVER:
|
|
||||||
case BlockID.STONE_BUTTON:
|
case BlockID.STONE_BUTTON:
|
||||||
case BlockID.WOODEN_BUTTON:
|
case BlockID.WOODEN_BUTTON: {
|
||||||
int thrown = data & 0x8;
|
int thrown = data & 0x8;
|
||||||
int withoutThrown = data & ~0x8;
|
switch (data & ~0x8) {
|
||||||
switch (withoutThrown) {
|
case 1: return 3 | thrown;
|
||||||
|
case 2: return 4 | thrown;
|
||||||
|
case 3: return 2 | thrown;
|
||||||
|
case 4: return 1 | thrown;
|
||||||
|
// 0 and 5 are vertical
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case BlockID.LEVER: {
|
||||||
|
int thrown = data & 0x8;
|
||||||
|
switch (data & ~0x8) {
|
||||||
case 1: return 3 | thrown;
|
case 1: return 3 | thrown;
|
||||||
case 2: return 4 | thrown;
|
case 2: return 4 | thrown;
|
||||||
case 3: return 2 | thrown;
|
case 3: return 2 | thrown;
|
||||||
@ -111,6 +121,7 @@ public final class BlockData {
|
|||||||
case 0: return 7 | thrown;
|
case 0: return 7 | thrown;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case BlockID.WOODEN_DOOR:
|
case BlockID.WOODEN_DOOR:
|
||||||
case BlockID.IRON_DOOR:
|
case BlockID.IRON_DOOR:
|
||||||
@ -316,12 +327,22 @@ public final class BlockData {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BlockID.LEVER:
|
|
||||||
case BlockID.STONE_BUTTON:
|
case BlockID.STONE_BUTTON:
|
||||||
case BlockID.WOODEN_BUTTON:
|
case BlockID.WOODEN_BUTTON: {
|
||||||
int thrown = data & 0x8;
|
int thrown = data & 0x8;
|
||||||
int withoutThrown = data & ~0x8;
|
switch (data & ~0x8) {
|
||||||
switch (withoutThrown) {
|
case 3: return 1 | thrown;
|
||||||
|
case 4: return 2 | thrown;
|
||||||
|
case 2: return 3 | thrown;
|
||||||
|
case 1: return 4 | thrown;
|
||||||
|
// 0 and 5 are vertical
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case BlockID.LEVER: {
|
||||||
|
int thrown = data & 0x8;
|
||||||
|
switch (data & ~0x8) {
|
||||||
case 3: return 1 | thrown;
|
case 3: return 1 | thrown;
|
||||||
case 4: return 2 | thrown;
|
case 4: return 2 | thrown;
|
||||||
case 2: return 3 | thrown;
|
case 2: return 3 | thrown;
|
||||||
@ -332,6 +353,7 @@ public final class BlockData {
|
|||||||
case 7: return 0 | thrown;
|
case 7: return 0 | thrown;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case BlockID.WOODEN_DOOR:
|
case BlockID.WOODEN_DOOR:
|
||||||
case BlockID.IRON_DOOR:
|
case BlockID.IRON_DOOR:
|
||||||
@ -509,11 +531,29 @@ public final class BlockData {
|
|||||||
case BlockID.REDSTONE_TORCH_OFF:
|
case BlockID.REDSTONE_TORCH_OFF:
|
||||||
case BlockID.REDSTONE_TORCH_ON:
|
case BlockID.REDSTONE_TORCH_ON:
|
||||||
if (data < 1 || data > 4) break;
|
if (data < 1 || data > 4) break;
|
||||||
/* FALL-THROUGH */
|
switch (data) {
|
||||||
|
case 1: return data + flipX;
|
||||||
|
case 2: return data - flipX;
|
||||||
|
case 3: return data + flipZ;
|
||||||
|
case 4: return data - flipZ;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BlockID.STONE_BUTTON:
|
||||||
|
case BlockID.WOODEN_BUTTON: {
|
||||||
|
switch (data & ~0x8) {
|
||||||
|
case 1: return data + flipX;
|
||||||
|
case 2: return data - flipX;
|
||||||
|
case 3: return data + flipZ;
|
||||||
|
case 4: return data - flipZ;
|
||||||
|
case 0:
|
||||||
|
case 5:
|
||||||
|
return data ^ (flipY * 5);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case BlockID.LEVER:
|
case BlockID.LEVER:
|
||||||
case BlockID.STONE_BUTTON:
|
|
||||||
case BlockID.WOODEN_BUTTON:
|
|
||||||
switch (data & ~0x8) {
|
switch (data & ~0x8) {
|
||||||
case 1: return data + flipX;
|
case 1: return data + flipX;
|
||||||
case 2: return data - flipX;
|
case 2: return data - flipX;
|
||||||
|
@ -1842,6 +1842,10 @@ public enum BlockType {
|
|||||||
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);
|
||||||
}
|
}
|
||||||
|
dataAttachments.put(typeDataKey(BlockID.STONE_BUTTON, 0), PlayerDirection.UP);
|
||||||
|
dataAttachments.put(typeDataKey(BlockID.STONE_BUTTON, 5), PlayerDirection.DOWN);
|
||||||
|
dataAttachments.put(typeDataKey(BlockID.WOODEN_BUTTON, 0), PlayerDirection.UP);
|
||||||
|
dataAttachments.put(typeDataKey(BlockID.WOODEN_BUTTON, 5), PlayerDirection.DOWN);
|
||||||
nonDataAttachments.put(BlockID.CACTUS, PlayerDirection.DOWN);
|
nonDataAttachments.put(BlockID.CACTUS, PlayerDirection.DOWN);
|
||||||
nonDataAttachments.put(BlockID.REED, PlayerDirection.DOWN);
|
nonDataAttachments.put(BlockID.REED, PlayerDirection.DOWN);
|
||||||
nonDataAttachments.put(BlockID.CAKE_BLOCK, PlayerDirection.DOWN);
|
nonDataAttachments.put(BlockID.CAKE_BLOCK, PlayerDirection.DOWN);
|
||||||
|
@ -2755,8 +2755,8 @@
|
|||||||
"values": {
|
"values": {
|
||||||
"down": { "data": 0, "direction": [0, -1, 0] },
|
"down": { "data": 0, "direction": [0, -1, 0] },
|
||||||
"east": { "data": 1, "direction": [1, 0, 0] },
|
"east": { "data": 1, "direction": [1, 0, 0] },
|
||||||
"south": { "data": 2, "direction": [0, 0, 1] },
|
"west": { "data": 2, "direction": [-1, 0, 0] },
|
||||||
"west": { "data": 3, "direction": [-1, 0, 0] },
|
"south": { "data": 3, "direction": [0, 0, 1] },
|
||||||
"north": { "data": 4, "direction": [0, 0, -1] },
|
"north": { "data": 4, "direction": [0, 0, -1] },
|
||||||
"up": { "data": 5, "direction": [0, 1, 0] }
|
"up": { "data": 5, "direction": [0, 1, 0] }
|
||||||
}
|
}
|
||||||
@ -4943,8 +4943,8 @@
|
|||||||
"values": {
|
"values": {
|
||||||
"down": { "data": 0, "direction": [0, -1, 0] },
|
"down": { "data": 0, "direction": [0, -1, 0] },
|
||||||
"east": { "data": 1, "direction": [1, 0, 0] },
|
"east": { "data": 1, "direction": [1, 0, 0] },
|
||||||
"south": { "data": 2, "direction": [0, 0, 1] },
|
"west": { "data": 2, "direction": [-1, 0, 0] },
|
||||||
"west": { "data": 3, "direction": [-1, 0, 0] },
|
"south": { "data": 3, "direction": [0, 0, 1] },
|
||||||
"north": { "data": 4, "direction": [0, 0, -1] },
|
"north": { "data": 4, "direction": [0, 0, -1] },
|
||||||
"up": { "data": 5, "direction": [0, 1, 0] }
|
"up": { "data": 5, "direction": [0, 1, 0] }
|
||||||
}
|
}
|
||||||
|
@ -46,8 +46,6 @@ public class BlockTransformExtentTest {
|
|||||||
ignored.add(BlockType.BED); // Broken in existing rotation code?
|
ignored.add(BlockType.BED); // Broken in existing rotation code?
|
||||||
ignored.add(BlockType.WOODEN_DOOR); // Complicated
|
ignored.add(BlockType.WOODEN_DOOR); // Complicated
|
||||||
ignored.add(BlockType.IRON_DOOR); // Complicated
|
ignored.add(BlockType.IRON_DOOR); // Complicated
|
||||||
ignored.add(BlockType.STONE_BUTTON); // Existing rotation code doesn't handle down/up directions
|
|
||||||
ignored.add(BlockType.WOODEN_BUTTON); // Existing rotation code doesn't handle down/up directions
|
|
||||||
ignored.add(BlockType.END_PORTAL); // Not supported in existing rotation code
|
ignored.add(BlockType.END_PORTAL); // Not supported in existing rotation code
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren