OrangeNBT 更新等 08/01

もう8月だぞ……、いいのか?

追加
BlockDataFixerを追加しました。

修正
DenseArrayワールドがバグる
Schematic、IdとMetadata逆だった。
なんかJsonのシリアライズバグってた

OrangeNBT20180801

ワールドSaveするときは現状ではちゃんとデータバージョン入れてください。
多分1.12のワールドでやるとバグるかもしれんので、1.12の時はちゃんと、1400番台の番号を入れとくように。
後で治します。というかセーブの引数廃止予定。

1.12から1.13の変換は対応しないことにしました。仕様です。せっかくなのでゲームを起動してあげてください。

注意!!!!!BlockDataFixerはだいたいの変換をサポートします。辞書に収録されているやつしか変換できません!!!
たまに変換バグるのも許してください。
正しい変換はMinecraftゲーム本体で変換することを推奨。

BlockDataFixer.GetNewBlock();だったかな。

辞書の量が大きいのでクラスを読み込むと一気にメモリ使用量増えるかもしれません。すまん。

OrangeNBT 更新等 07/26

厳しい戦いだった……

・なんかめっちゃ追加された。
・ワールド恐らく読み書きできます。SetBlock(); GetBlock();を使って下さい。
・1.13の辞書が追加されました。(BlockIdは)ないです。

これから直すとこ
・BlockSetの需要めっちゃ高いのにインスタンス生成しにくい。

まだまだ不安定な気がするのでバンバンフィードバックを頼むぜ!
OrangeNBT20180726

https://github.com/noto0648/OrangeNBT/commit/46e833f0ad7cb7543b43f344365a6214e51ec3f4

パレット方式闇すぎる……めっちゃ圧縮されたデータフォーマットになりました。(洗練されているとは言っていない。
プログラムからは正直扱いにくい希ガス。
long型(64bit)を最大限利用するために、パレットの大きさ(チャンクセクション内のブロックの種類)が16までだったら、4bitで保存されている。ゆえに1つのlong型に16ブロックの情報が書き込めるってわけ。まあ、まだ4bitならまだいいんですが、5bitになると、頭おかしい。longの配列に保存されるため、2つの変数をまたぐ。?????めんどくさすぎた。おかげでbit処理が結構うまくなったと思います(白目)。でもまだ不具合ありそう。

Heightmapはまだ知らん。解析終わるまで待とう。
フェンスや階段みたいなブロックは、水につかるフラグみたいなプロパティ値で管理されている。metadataが16までない状態だと明らかに無理だったもんね。仕方ないね。ワールドのロードが遅くなるのは仕方ないと思います。

ついでにバイオームの配列もbyte型からint型になったのでめっちゃ増やせる。ブロックも理論状めっちゃ追加できる。すげえな。やっぱり。

dllのサイズがめっちゃ大きくなったのは1.13の辞書のせいです。ごめんなさい

OrangeNBT 何もしてない 7/22

追加:
BlockSet、AnvilChunkImproved(1.13専用~

修正:
HelperにGetLongArray追加した。
GetBlockId、SetBlockId、GetBlockData、SetBlockData廃止してGetBlockとSetBlockのみに

次ぐらいでBlockSetのMetadataとBlockのIdをObsoluteにするかもしれん。

なんか言葉で説明するの面倒なので、push履歴みてくれ
https://github.com/noto0648/OrangeNBT/commit/71fc0d5ff68c45a6780603df34ae3c919cd9f87d

バイナリはありません。まだ動きません。何故かって?1.13のブロックの辞書が搭載されてないからだ。
1.12以前とどのようにしてうまく切り替える機能を追加するかを模索中。

OrangeNBT 修正等07/07

デレステのイベントやるのを忘れていました。悔しい。

・streamの途中からでも読み込めるようになった
・Bedrockのための拡張等

OrangeNBT20180707

github:
https://github.com/noto0648/OrangeNBT

いつの間にか七夕ですね……。完成しますように……。念力でプログラミングしたい

OrangeNBT更新等06/10

更新しました。

fix
ListChunkCoordがマジメになった
IChunkManagerのContainsが追加されました。やりました!

add
Dataの方にIGameDataProviderとかいうわけわからないやつが追加された

次ぐらいで.nbt/structure対応できるかと思います。
以上

OrangeNBT20160610

OrangeNBT.Bedrockっていう名前でいこうと思ってるんだけど、ほかに良い案あったら教えてください。
OrangeNBT.PEやOrangeNBT.BEなんかもありかなと思ってますけど。

(メモ)VisualStudioでコンパイルできるmojangのleveldbの奴のリンク
https://github.com/jocopa3/leveldb-mcpe

OrangeNBT 修正等06/03

もはやデイリーアップデート状態。

-修正
AnvilChunkManagerの破棄がたまに失敗する問題
ディメンションの新規作成時にフォルダが完全に空だと失敗する問題
ChunkCoordのコンストラクタの引数がxyだった問題

-追加
ChunkCoordがToStringできる
IChunkManagerに ListAllCoordsという謎の関数を追加した。
AnvilWorldにAddDimensionというよくわからない関数を追加した。(仮)

OrangeNBT20180603

以上!

OrangeNBT 修正等06/02

Cuboid/BlockPosにてOverFlowする問題を解決。

null非許容型がほしい。ください。

SNLはまだ直してません。

OrangeNBTはオープンソースで自分でビルドもできるので、バグを見つけたらぜひ、解決策も示していただけるとめっちゃはかどる。(自分でやれ)

https://github.com/noto0648/OrangeNBT

OrangeNBT20180602

TODO:
BE対応
Chunk破損でリスト失敗→チャンクコードのみを吐く関数を提供
ChunkCoordのコンストラクタの引数がx,y
ChunkCoordのToString書く。

OrangeNBT 修正等 06/01

OrangeNBT

schematic追加しました。
World.Loadが使えないバグを修正しました。
Json関連も修正しました。

一部ネームスペースが変更となっています。Worldに含まれてたもので共通化したいものをDataの方へ移動させました。

ダウンロード:
OrangeNBT20180601

git:
https://github.com/noto0648/OrangeNBT

Readmeかかねば。

OrangeNBT使い方1

Schematic/Structureの実装に悩んでます。どうも。

SNLでNBTTagなんたらはOrangeNBT.NBTにあります。

・初期化など

var tag = new TagCompound()
{
new TagInt("DataVersion", 1),
new TagCompound("Level")
{
new TagInt("xPos", _coord.X),
new TagInt("zPos", _coord.Z),
new TagLong("LastUpdate", DateTime.Now.Ticks),
new TagByte("V", 1),
new TagByte("TerrainPopulated", (byte)(_isTerrainPopulated? 1 : 0)),
new TagByte("LightPopulated", (byte)(_isLightPopulated? 1 : 0)),
new TagIntArray("HeightMap", _heights),
new TagByteArray("Biomes", _biomes)
}
};

TagCompoundのクラスにはAdd(val)関数は実装されていません。
using OrangeNBT.Helper;
ってやるといろいろ追加されます。拡張メソッドで定義されています


using OrangeNBT.Helper;
c._heights = level.GetIntArray("HeightMap");
c._isTerrainPopulated = level.GetBool("TerrainPopulated");
c._isLightPopulated = level.GetBool("LightPopulated");

ところで、アルファ版というかDev版は破壊的変更し放題ですね。最高。ネームスペースが突然変わったり引数が増えたり減ったりします。

LongArrayもあるので使ってね!(いつから追加されたのだろう)(使い用途不明)(コマンド用?)

https://github.com/noto0648/OrangeNBT

Githubに上がってます。気になったところは教えてください。
ちなみにいつになってもgit苦手です。つらい。
またひと段落したらPushします

バイナリは前記事よりDLしてください。

bedrock版では、どうも1.4になってしまったようですね。よさそう。建築したいです。

OrangeNBT

OrangeNBTはなぜ生み出されたのか。
OrangeNBTの発表自体今からだいたい2年前くらいに発表しました。
しかし、1年ぐらい放置してました。

SNLの代わりになるものを目指してるわけではありません。
汎用のNBTライブラリを目指して作られています。

OrangeNBTの改善点!
SNLはそもそもぼくのNBTエディタの内部コードをもとに作られたライブラリです。したがって数年前の産物でありコードが汚い。読めない。それをつぎはぎして改善してきたためとてつもなくわけのわからないコードを生み出してしまった。
おまけに僕はソースコードにコメントを書かない主義なので読むのに時間がかかる。(コメントなくても読みやすいコードを目指していた)
しかし、保守するのには限界がきた。僕にもわけのわからないバグもたくさん生み出されてきた。
そこで読みやすい保守しやすいコードを生み出すためにOrangeNBTという1から書き直しを行うことにした。

OrangeNBTのよいところ

  • .net Standard 2.0で書かれてる
  • 読みやすい
  • オープンソース(予定)
  • Bedrock Editionのデータ対応予定
  • ネームスペースわけがきれい

まだダメなところ

  • デバッグが完全ではないため動かないコード多数
  • まだ未実装のコード多数
  • まだSNLより機能が少ない
  • ワールドライティング未対応
  • Schematic/.nbtファイル未対応
  • TagCompoundのヘルパー機能がほぼない

課題

  • 現状dllが分かれているため統合するか検討中
  • ブロックデータアイテムデータ等の導入。ゲームのアップデートに追いつくのが大変

    OrangeNBTは一応最低限のNBTライブラリを目標にしているためSNLで実装されていた多くの機能は削る可能性があります。

    一人ではデバッグするのめんどい大変なため一応バイナリを公開します。
    ゆっくりまったりと開発を行います。

    OrangeNBT

    バイナリはデバッグコンパイルです。