2016-04-08 11:30:41 -04:00
|
|
|
|
2018-11-04 15:15:34 -05:00
|
|
|
use crate::axis::Axis;
|
2016-04-08 11:30:41 -04:00
|
|
|
|
2016-04-03 15:53:40 -04:00
|
|
|
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
|
|
|
|
pub enum Direction {
|
|
|
|
Invalid,
|
|
|
|
Down,
|
2016-04-08 11:30:41 -04:00
|
|
|
Up,
|
2016-04-03 15:53:40 -04:00
|
|
|
North,
|
|
|
|
South,
|
|
|
|
West,
|
|
|
|
East,
|
|
|
|
}
|
|
|
|
|
|
|
|
impl Direction {
|
|
|
|
pub fn all() -> Vec<Direction> {
|
|
|
|
vec![
|
2016-04-08 11:30:41 -04:00
|
|
|
Direction::Down, Direction::Up,
|
2016-04-03 15:53:40 -04:00
|
|
|
Direction::North, Direction::South,
|
|
|
|
Direction::West, Direction::East,
|
|
|
|
]
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn from_string(val: &str) -> Direction {
|
|
|
|
match val {
|
|
|
|
"down" => Direction::Down,
|
2016-04-08 11:30:41 -04:00
|
|
|
"up" => Direction::Up,
|
2016-04-03 15:53:40 -04:00
|
|
|
"north" => Direction::North,
|
|
|
|
"south" => Direction::South,
|
|
|
|
"west" => Direction::West,
|
|
|
|
"east" => Direction::East,
|
|
|
|
_ => Direction::Invalid,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn opposite(&self) -> Direction {
|
|
|
|
match *self {
|
|
|
|
Direction::Down => Direction::Up,
|
2016-04-08 11:30:41 -04:00
|
|
|
Direction::Up => Direction::Down,
|
2016-04-03 15:53:40 -04:00
|
|
|
Direction::North => Direction::South,
|
|
|
|
Direction::South => Direction::North,
|
|
|
|
Direction::West => Direction::East,
|
|
|
|
Direction::East => Direction::West,
|
|
|
|
_ => unreachable!(),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn clockwise(&self) -> Direction {
|
|
|
|
match *self {
|
|
|
|
Direction::Down => Direction::Down,
|
2016-04-08 11:30:41 -04:00
|
|
|
Direction::Up => Direction::Up,
|
2016-04-03 15:53:40 -04:00
|
|
|
Direction::East => Direction::South,
|
|
|
|
Direction::West => Direction::North,
|
|
|
|
Direction::South => Direction::West,
|
|
|
|
Direction::North => Direction::East,
|
|
|
|
_ => unreachable!(),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn counter_clockwise(&self) -> Direction {
|
|
|
|
match *self {
|
|
|
|
Direction::Down => Direction::Down,
|
2016-04-08 11:30:41 -04:00
|
|
|
Direction::Up => Direction::Up,
|
2016-04-03 15:53:40 -04:00
|
|
|
Direction::East => Direction::North,
|
|
|
|
Direction::West => Direction::South,
|
|
|
|
Direction::South => Direction::East,
|
|
|
|
Direction::North => Direction::West,
|
|
|
|
_ => unreachable!(),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn get_offset(&self) -> (i32, i32, i32) {
|
|
|
|
match *self {
|
|
|
|
Direction::Down => (0, -1, 0),
|
2016-04-08 11:30:41 -04:00
|
|
|
Direction::Up => (0, 1, 0),
|
2016-04-03 15:53:40 -04:00
|
|
|
Direction::North => (0, 0, -1),
|
|
|
|
Direction::South => (0, 0, 1),
|
|
|
|
Direction::West => (-1, 0, 0),
|
|
|
|
Direction::East => (1, 0, 0),
|
|
|
|
_ => unreachable!(),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn as_string(&self) -> &'static str {
|
|
|
|
match *self {
|
|
|
|
Direction::Down => "down",
|
2016-04-08 11:30:41 -04:00
|
|
|
Direction::Up => "up",
|
2016-04-03 15:53:40 -04:00
|
|
|
Direction::North => "north",
|
|
|
|
Direction::South => "south",
|
|
|
|
Direction::West => "west",
|
|
|
|
Direction::East => "east",
|
|
|
|
Direction::Invalid => "invalid",
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn index(&self) -> usize {
|
|
|
|
match *self {
|
2016-04-08 11:30:41 -04:00
|
|
|
Direction::Down => 0,
|
|
|
|
Direction::Up => 1,
|
2016-04-03 15:53:40 -04:00
|
|
|
Direction::North => 2,
|
|
|
|
Direction::South => 3,
|
|
|
|
Direction::West => 4,
|
|
|
|
Direction::East => 5,
|
|
|
|
_ => unreachable!(),
|
|
|
|
}
|
|
|
|
}
|
2016-04-08 11:30:41 -04:00
|
|
|
|
1.13.2 (404) multiprotocol support (#67)
Adds support for 1.13.2 protocol (404)
Expands https://github.com/iceiix/steven/issues/18 Enhance protocol support
Metadata:
* Support 1.13.2 slot data format, bool and varint item id, optional damage (moved to NBT)
https://wiki.vg/index.php?title=Slot_Data&type=revision&diff=14363&oldid=7835
Packets:
* Add 1.13.2 packets, and implement all the command data parsers
https://wiki.vg/Command_Data#Parsers
* Send new plugin channel minecraft:brand
https://wiki.vg/Plugin_channels#minecraft:brand
* Add 1.13.2 metadata format, with shifted IDs
https://wiki.vg/Entity_metadata#Entity_Metadata_Format
* Implement particle entity metadata
* Add structures for 16 new packets
Blocks: The Flattening:
* Assign flattened IDs in correct order using new 'offset' macro token
* Assign hierarchical (pre-flattening) block IDs sequentially by counting Some data
* Split VANILLA_ID_MAP into flat/hier struct, to support before and after the flattening
* Extend travis build time to 20 minutes because the blocks macro takes a long time
* Support both flat/hier blocks by passing protocol_version to by_vanilla_id
Add block states and offsets for all blocks, replacing metadata for 1.13+:
* Add stripped logs and what was Log2 to Log
* Add the Wood blocks, should be called bark, previously Axis::None Log
* Add leaves distance and offset
* Add jungle/acacia to Leaves moved from Leaves2
* Add dispenser offsets, direction
* Add note block states
* Add offset None to Missing253 and Missing254, no holes in block states of 1.13.2
* Add bed colors
* Add seagrass, tall seagrass, remove redundant deadgrass, and piston offset
* Add torch, TNT, fire offsets, remove slabs
* Add furnance offset, merges lit into a property
* Add pressure plate offsets, new pressure plates, redstone ore/lit merged
* Add lever offsets, new directions from ceiling/floor, rename LeverDirections
* Add redstone torch offsets, new blocks since lit/unlit is now merged, and standing/wall is split
* Change lever to split face/facing, rm LeverDirection, add AttachedFace
* Add stone button offsets, face/facing similar to lever
* Move face/facing data and variant to AttachedFace, reuse for lever/stonebutton
* Add data_with_facing_and_powered() to AttachedFace, for lever/stonebutton
* Add wooden button offsets each wood
* Add pumpkin without a face
* Add carved pumpkin, portal offsets
* Add lit pumpkin (as jack-o-lantern) offsets after carved pumpkin
* Add repeater offsets, merged into Repeater
* Change brown mushroom block to booleans instead of MushroomVariant
* Add mushroom block offsets, red/brown mushroom blocks, and a new mushroom stem block
* Add command block, cobblestone walls, and flower pot offsets
Empty flower pot, and potted plants including saplings. Rename
variant DarkOak to DarkOakSaplings because it is a sapling, and
remove the duplicate Dandelion variant which causes duplicate blocks.
* Increase recursion limit in steven_blocks
* Add colored banner offsets
* Add wooden slab including double slab, in a different position for pre-1.13 and 1.13
* StoneSlabVariant::Wood -> StoneSlabVariant::PetrifiedWood
* Add fence_gate_offset() for wooden fence gates
* Add frosted ice age, offset
* Add new blocks: kelp, turtle egg, coral, coral fans, sea pickle, blue ice, smooth stone
* Add new blocks: conduit, void air, cave aid, bubble column, last of the 1.13 blocks
2018-12-29 00:11:42 -05:00
|
|
|
pub fn offset(&self) -> usize {
|
|
|
|
match *self {
|
|
|
|
Direction::North => 0,
|
|
|
|
Direction::East => 1,
|
|
|
|
Direction::South => 2,
|
|
|
|
Direction::West => 3,
|
|
|
|
Direction::Up => 4,
|
|
|
|
Direction::Down => 5,
|
|
|
|
_ => unreachable!(),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2016-04-08 11:30:41 -04:00
|
|
|
pub fn horizontal_index(&self) -> usize {
|
|
|
|
match *self {
|
|
|
|
Direction::North => 2,
|
|
|
|
Direction::South => 0,
|
|
|
|
Direction::West => 1,
|
|
|
|
Direction::East => 3,
|
|
|
|
_ => unreachable!(),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
1.13.2 (404) multiprotocol support (#67)
Adds support for 1.13.2 protocol (404)
Expands https://github.com/iceiix/steven/issues/18 Enhance protocol support
Metadata:
* Support 1.13.2 slot data format, bool and varint item id, optional damage (moved to NBT)
https://wiki.vg/index.php?title=Slot_Data&type=revision&diff=14363&oldid=7835
Packets:
* Add 1.13.2 packets, and implement all the command data parsers
https://wiki.vg/Command_Data#Parsers
* Send new plugin channel minecraft:brand
https://wiki.vg/Plugin_channels#minecraft:brand
* Add 1.13.2 metadata format, with shifted IDs
https://wiki.vg/Entity_metadata#Entity_Metadata_Format
* Implement particle entity metadata
* Add structures for 16 new packets
Blocks: The Flattening:
* Assign flattened IDs in correct order using new 'offset' macro token
* Assign hierarchical (pre-flattening) block IDs sequentially by counting Some data
* Split VANILLA_ID_MAP into flat/hier struct, to support before and after the flattening
* Extend travis build time to 20 minutes because the blocks macro takes a long time
* Support both flat/hier blocks by passing protocol_version to by_vanilla_id
Add block states and offsets for all blocks, replacing metadata for 1.13+:
* Add stripped logs and what was Log2 to Log
* Add the Wood blocks, should be called bark, previously Axis::None Log
* Add leaves distance and offset
* Add jungle/acacia to Leaves moved from Leaves2
* Add dispenser offsets, direction
* Add note block states
* Add offset None to Missing253 and Missing254, no holes in block states of 1.13.2
* Add bed colors
* Add seagrass, tall seagrass, remove redundant deadgrass, and piston offset
* Add torch, TNT, fire offsets, remove slabs
* Add furnance offset, merges lit into a property
* Add pressure plate offsets, new pressure plates, redstone ore/lit merged
* Add lever offsets, new directions from ceiling/floor, rename LeverDirections
* Add redstone torch offsets, new blocks since lit/unlit is now merged, and standing/wall is split
* Change lever to split face/facing, rm LeverDirection, add AttachedFace
* Add stone button offsets, face/facing similar to lever
* Move face/facing data and variant to AttachedFace, reuse for lever/stonebutton
* Add data_with_facing_and_powered() to AttachedFace, for lever/stonebutton
* Add wooden button offsets each wood
* Add pumpkin without a face
* Add carved pumpkin, portal offsets
* Add lit pumpkin (as jack-o-lantern) offsets after carved pumpkin
* Add repeater offsets, merged into Repeater
* Change brown mushroom block to booleans instead of MushroomVariant
* Add mushroom block offsets, red/brown mushroom blocks, and a new mushroom stem block
* Add command block, cobblestone walls, and flower pot offsets
Empty flower pot, and potted plants including saplings. Rename
variant DarkOak to DarkOakSaplings because it is a sapling, and
remove the duplicate Dandelion variant which causes duplicate blocks.
* Increase recursion limit in steven_blocks
* Add colored banner offsets
* Add wooden slab including double slab, in a different position for pre-1.13 and 1.13
* StoneSlabVariant::Wood -> StoneSlabVariant::PetrifiedWood
* Add fence_gate_offset() for wooden fence gates
* Add frosted ice age, offset
* Add new blocks: kelp, turtle egg, coral, coral fans, sea pickle, blue ice, smooth stone
* Add new blocks: conduit, void air, cave aid, bubble column, last of the 1.13 blocks
2018-12-29 00:11:42 -05:00
|
|
|
pub fn horizontal_offset(&self) -> usize {
|
|
|
|
match *self {
|
|
|
|
Direction::North => 0,
|
|
|
|
Direction::South => 1,
|
|
|
|
Direction::West => 2,
|
|
|
|
Direction::East => 3,
|
|
|
|
_ => unreachable!(),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-04-08 11:30:41 -04:00
|
|
|
pub fn axis(&self) -> Axis {
|
|
|
|
match *self {
|
|
|
|
Direction::Down | Direction::Up => Axis::Y,
|
|
|
|
Direction::North | Direction::South => Axis::Z,
|
|
|
|
Direction::West | Direction::East => Axis::X,
|
|
|
|
_ => unreachable!(),
|
|
|
|
}
|
|
|
|
}
|
2016-04-03 15:53:40 -04:00
|
|
|
}
|