# rbedrock 0.4.1

* Undefined behavior identified by the M1-San system was fixed.

# rbedrock 0.4.0

## Breaking Changes

* This release includes a new API for reading and writing from the world
  database. The new API is designed to better support pipes and use a common
  database connection across functions. Most functions associated with reading
  and writing values to a world database were impacted. Consider the process of
  getting a set of values from a common prefix.
  
  ```R
  db <- bedrockdb(dbpath)
  # Previous API
  dat <- get_data(db, starts_with = prefix)
  # New API
  #   - automatically uses db
  #   - prefixes created with helper function
  dat <- get_data(starts_with(prefix))

  # Previous API
  put_data(db, dat)
  # New API
  put_data(dat)

  # Previous API
  put_values(db, names(dat), dat)
  # New API
  put_data(dat, names(dat))
  ```
* As part of the new API, the `get_values()`, `set_values()`, and related
  `_values()` functions were removed.

* The API for working NBT and rNBT values has been reimagined.
  - NBT lists are now treated as vectors where ever possible.
  - NBT longs are now stored as strings to protect against data loss.
  - NBT integers are now stored as doubles to protect against data loss.
* New `get_blocks_*` and `put_blocks_*` functions have replaced
  `get_chunk_blocks_*` and `put_chunk_blocks_*`. The new functions work per
  chunk and always return blocks as a 16 x 384 x 16 array, regardless of the
  dimension. 

## New Features

* New `default_db()` function to get/set a default db connection.
* New `print()` etc. commands for printing NBT using a tree structure.
* New `with_db()` and `local_db()` for temporarily changing the default db
  connection.

## Miscellaneous Fixes and Features

* New pkgdown-based website for rbedrock.
* The requirements for a key to be interpreted as a chunk key has been relaxed.
  Now any raw key of length 9, 10, 13, or 14 will be considered a chunk key
  if it contains at least one non-printable character. Collisions between
  plain and chunk keys can still occur, but they are not likely in this scheme.
* New `biome_name()` function for converting from a numeric id to biome name.
* New `read_rnbt_once()` function to parse NBT data that is mixed in with non
  NBT data. It returns a single NBT value along with how may bytes the value
  was.
* New `blocks_nbt()` and `blocks_str()` functions to convert block data between
  NBT and string representations.
* `spawning_area()` no longer requires a chunk to be withing 96 blocks of a
  player.
* Vendored LevelDB library is now built with exceptions enabled to avoid libcxx
  including `abort()` calls if exceptions are not enabled.
* The following dependencies were removed stringr, dplyr, purrr, magrittr,
  reader, vctrs, tidyr, and fs.

# RBedrock 0.3.3

* Fix notes identified by CRAN. (Unused calls to stderr and abort.)
* Update included leveldb library.

# RBedrock 0.3.2

* Fixed errors in usage of `Rf_error()`.
* Use `R_len_t` in more locations.

# RBedrock 0.3.1

* Remove hardcoded C++17 requirement when calling CMake.

# RBedrock 0.3.0

* Added support for reading and writing 1.18.30+ actor digests.
* Chunk data functions have been expanded.
* [Breaking Change] Biome functions now return CNC biomes data (CnC biome functions have been renamed.) Accessing legacy biome data can be done with legacy biome functions.
* [Breaking Change] Chunk data functions and files have been renamed to match internal Mojang names.
* [Breaking Change] Chunk data functions no longer default to reading all keys from `db` if no keys are present.
* [Breaking Change] Chunk tag key descriptions have been changed to better match internal Mojang descriptions.
* Maximum chunk key tag has been increased to 96.
* [Breaking Change] Change key format to require prefixes in front of every key. This allows rbedrock to support multiple key formats.
* Add nbt_raw_string to support reading and writing nbt_string data that contains embedded nulls.
* Change default parameters to bedrockdb to match Minecraft. This reduces the size of worlds modified by rbedrock.
* Generate random world seeds using 64-bits.
* [Fix] Generate default package options on loading rbedrock. This fixes users not being able to find the world directory on Window.
* Create 1.19+ worlds by default when using create_world()
* Add functions for reading and writing actors data for a chunk.
* Add utility functions for working with unique ids.

# RBedrock 0.2.0

* Support subchunk version 9 introduced for Caves and Cliffs.
* Support Caves and Cliffs' 3DMaps.
* Change tag format to `@x:z:d:t:s`. This change was made because subtags can now be negative.
* Add `locate_blocks()` function.
* Introduce intermediate `rnbt` (raw nbt) format.
* Introduce new NBT API based on S3 classes.
* Remove layer and simplify arguments to `get_subchunk_layers_value()` and friends.
* Improved ChunkVersion API
* Remove `-Werror` flag used by leveldb on some platforms
* Added 1.18 example world
* Add support for 1.18's empty palettes.
* Rename chunk tag to match internal bedrock names.
* Add `starts_with` option to `get_values()`, and `db$mget_prefix()` and `bedrock_leveldb_mget_prefix()` function.
* Add `get_subchunk_blocks_from_chunk()` function to efficiently lead subchunks from a single chunk.
* Add utility functions for calculating spawning area and simulation area.

# RBedrock 0.1.1

* Fixed errors identified by UBSAN and Valgrind
* Improved the detection of cmake binary.
* RBedrock can now be compiled on Solaris using GCC.
* RBedrock can now be compiled by CRAN's MacOS builder.
* Updated README.md

# RBedrock 0.1.0

* Initial Release
