Sinisira ng mga negatibong coordinate ang matematika ng chunk sa dalawang lugar, hindi lang isa
Inilalagay ng truncating division ang block −1 sa chunk 0 sa halip na −1, at ang simpleng % ay nagbibigay ng in-chunk offset na −1 sa halip na 15. Parehong mali ang mga ito, at parehong mukhang tama hanggang sa pumunta ka sa kanluran ng spawn.
Napakadali ng bawat kalkulasyon ng chunk sa positibong quadrant at mali sa tatlo pa. May eksaktong dalawang lugar kung saan ito nagkakamali, independiyente ang mga ito sa isa't isa, at pareho silang nagbibigay ng mga sagot na mukhang kapani-paniwala.
Ang dalawang operasyon
chunk = floor(block / 16) not trunc(block / 16)
offset = ((block % 16) + 16) % 16 not block % 16
Ang mga coordinate ng rehiyon ay parehong pares, isang antas pataas, na may 32 sa halip na 16:
region = floor(chunk / 32) -> r.<x>.<z>.mca
regionOff = ((chunk % 32) + 32) % 32
Kaya ang isang rehiyon ay 32 × 32 chunk, na katumbas ng 512 × 512 block.
Kung saan nagkakaroon ng problema ang bawat isa
Paghahati. Karamihan sa mga wika ay nagta-truncate patungo sa zero, at floor rounds toward negative infinity. They agree for positives and disagree for every negative that is not an exact multiple:
- block
−1→floor(−1/16) = −1✓, buttrunc(−1/16) = 0✗
Ang Block −1 ay isang block pakanluran mula sa origin at kabilang sa chunk −1. Inilalagay ito ng truncation sa chunk 0, kasama ng block +1. Ang bawat negatibong chunk index ay lumalabas na mas mataas nang isa.
Remainder. Sa JavaScript, Java, C at karamihan sa iba pa, % keeps the sign of the left operand:
- block
−1→ correct offset15, but−1 % 16 = −1✗
Ang offset na −1 ay hindi kailanman posisyon sa loob ng 16-lapad na chunk. Ang pag-index sa isang block array gamit ito ay maaaring mag-error o tahimik na magbasa ng maling cell.
Isang halimbawa
Block −1290 sa isang axis:
| hakbang | tama | naive |
|---|---|---|
| chunk | floor(−1290/16) = −81 | trunc = −80 ✗ |
| offset sa chunk | 6 | −1290 % 16 = −10 ✗ |
| rehiyon | floor(−81/32) = −3 | trunc = −2 ✗ |
| offset sa rehiyon | 15 | −81 % 32 = −17 ✗ |
Apat na halaga, apat na maling sagot, wala sa mga ito ang sobrang labas sa saklaw para magmukhang sira. Sumasaklaw ang Rehiyon −3 sa mga chunk −96 hanggang −65, at ang chunk −81 ay 15 mula sa simula nito — na siyang eksaktong ibinabalik ng naitamang remainder.
May nawawalang impormasyon ang conversion sa Nether sa isang direksyon
Mula Overworld patungong Nether ay naghahati sa 8, at nagfo-floor din:
netherX = floor(overworldX / 8)
Ang pagbalik ay nagpaparami sa 8. Iyon ay hindi isang round trip. floor throws away the remainder, so returning lands you on a multiple of 8:
- Overworld
1000→ Nether125→ back to1000✓ - Overworld
1007→ Nether125→ back to1000✗ — seven blocks short
Ang error ay 0 hanggang 7 block bawat axis, kaya hanggang 7 sa X at 7 sa Z nang sabay. Iyon ang buong dahilan kung bakit kailangan isulat ang coordinate ng Nether sa halip na muling kalkulahin para sa tumpak na pag-link ng portal: kapag nahati mo na, hindi na mababawi ang orihinal na posisyon sa overworld.
Para sa isang Nether hub bihirang maging mahalaga ito — ang 7 block ay nasa loob ng capture radius ng portal mismo. Para sa pag-link ng dalawang portal na hindi dapat mag-agawan ng trapiko, napakahalaga nito.
Pinalalala ito ng mga negatibong coordinate ng overworld sa pamilyar na paraan: overworld −1 gives Nether floor(−1/8) = −1, while truncation gives 0 and sends you to the wrong side of the axis.