обновление интерфейсов пакета mc.core.world.*
выделены методы для локальных и глобальных координат + добавлена документация
This commit is contained in:
@@ -1,7 +1,3 @@
|
||||
/*
|
||||
* DmitriyMX <dimon550@gmail.com>
|
||||
* 2018-04-15
|
||||
*/
|
||||
package mc.core.world;
|
||||
|
||||
import mc.core.EntityLocation;
|
||||
@@ -21,14 +17,26 @@ public interface World {
|
||||
setSpawn(x, y, z, 0f, 0f);
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить чанк по координатам
|
||||
* @param x глобальный X
|
||||
* @param z глобальный Z
|
||||
* @return {@link mc.core.world.chunk.Chunk}
|
||||
*/
|
||||
Chunk getChunk(int x, int z);
|
||||
void setChunk(int x, int z, Chunk chunkSection);
|
||||
|
||||
default Chunk getChunk(BlockLocation location) {
|
||||
return getChunk(location.getX() >> 4, location.getZ() >> 4);
|
||||
}
|
||||
|
||||
default Chunk getChunk(EntityLocation location) {
|
||||
return getChunk(location.getBlockX() >> 4, location.getBlockZ() >> 4);
|
||||
}
|
||||
|
||||
/**
|
||||
* Установить чанк по координатам
|
||||
* @param x глобальный X
|
||||
* @param z глобальный Z
|
||||
* @param chunk {@link mc.core.world.chunk.Chunk}
|
||||
*/
|
||||
void setChunk(int x, int z, Chunk chunk);
|
||||
}
|
||||
|
||||
@@ -2,13 +2,67 @@ package mc.core.world.chunk;
|
||||
|
||||
import mc.core.world.Biome;
|
||||
|
||||
/* 16x256x16 */
|
||||
public interface Chunk {
|
||||
/**
|
||||
* Глобальная координата X
|
||||
* @return
|
||||
*/
|
||||
int getX();
|
||||
|
||||
/**
|
||||
* Глобальная координата Z
|
||||
* @return
|
||||
*/
|
||||
int getZ();
|
||||
|
||||
/**
|
||||
* Получить секцию чанка
|
||||
* @param height высота (0-15)
|
||||
* @return {@link mc.core.world.chunk.ChunkSection}
|
||||
*/
|
||||
ChunkSection getChunkSection(int height);
|
||||
|
||||
/**
|
||||
* Установить секцию чанка
|
||||
* @param height высота (0-15)
|
||||
* @param chunkSection {@link mc.core.world.chunk.ChunkSection}
|
||||
*/
|
||||
void setChunkSection(int height, ChunkSection chunkSection);
|
||||
|
||||
Biome getBiome(int localX, int localZ);
|
||||
void setBiome(int localX, int localZ, Biome biome);
|
||||
/**
|
||||
* Получиь данные по биому
|
||||
* @param x глобальный X
|
||||
* @param z глобальный Z
|
||||
* @return
|
||||
*/
|
||||
default Biome getBiome(int x, int z) {
|
||||
return getBiomeLocal(x >> 4, z >> 4);
|
||||
}
|
||||
|
||||
/**
|
||||
* Получиь данные по биому
|
||||
* @param x локальный X (0-15)
|
||||
* @param z локальный Z (0-15)
|
||||
* @return
|
||||
*/
|
||||
Biome getBiomeLocal(int x, int z);
|
||||
|
||||
/**
|
||||
* Указать данные по биому
|
||||
* @param x глобальный X
|
||||
* @param z глобальный Z
|
||||
* @param biome {@link mc.core.world.Biome}
|
||||
*/
|
||||
default void setBiome(int x, int z, Biome biome) {
|
||||
setBiomeLocal(x >> 4, z >> 4, biome);
|
||||
}
|
||||
|
||||
/**
|
||||
* Указать данные по биому
|
||||
* @param x локальный X (0-15)
|
||||
* @param z локальный Z (0-15)
|
||||
* @param biome {@link mc.core.world.Biome}
|
||||
*/
|
||||
void setBiomeLocal(int x, int z, Biome biome);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,12 @@
|
||||
package mc.core.world.chunk;
|
||||
|
||||
public interface ChunkProvider {
|
||||
/**
|
||||
* Получить чанк по координатам
|
||||
* @param x глобальный X
|
||||
* @param z глобальный Z
|
||||
* @return {@link mc.core.world.chunk.Chunk}
|
||||
*/
|
||||
Chunk getChunk(int x , int z);
|
||||
|
||||
void saveChunk(Chunk chunk);
|
||||
|
||||
@@ -5,26 +5,108 @@ import mc.core.world.block.Block;
|
||||
|
||||
/* 16x16x16 */
|
||||
public interface ChunkSection {
|
||||
/**
|
||||
* Глобальная координата X
|
||||
* @return
|
||||
*/
|
||||
int getX();
|
||||
|
||||
/**
|
||||
* Высота
|
||||
* @return
|
||||
*/
|
||||
int getY();
|
||||
|
||||
/**
|
||||
* Глобальная координата Z
|
||||
* @return
|
||||
*/
|
||||
int getZ();
|
||||
|
||||
/**
|
||||
* Получить блок
|
||||
* @param x глобальный X
|
||||
* @param y глобальный Y
|
||||
* @param z глобальный Z
|
||||
* @return {@link mc.core.world.block.Block}
|
||||
*/
|
||||
default Block getBlock(int x, int y, int z) {
|
||||
return getBlockLocal(x >> 4, y >> 4, z >> 4);
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить блок
|
||||
* @param x локальный X (0-15)
|
||||
* @param y локальный Y (0-15)
|
||||
* @param z локальный Z (0-15)
|
||||
* @return {@link mc.core.world.block.Block}
|
||||
*/
|
||||
Block getBlockLocal(int x, int y, int z);
|
||||
|
||||
/**
|
||||
* Установить блок
|
||||
* @param block {@link mc.core.world.block.Block}
|
||||
*/
|
||||
void setBlock(Block block);
|
||||
|
||||
/**
|
||||
* Получить блок по внутренним координатам
|
||||
* @param x X
|
||||
* @param y Y
|
||||
* @param z Z
|
||||
* @return {@link mc.core.world.block.Block}
|
||||
* Получить данные о естественной подсветке
|
||||
* @param x глобальный X
|
||||
* @param y глобальный Y
|
||||
* @param z глобальный Z
|
||||
* @return integer значение 0-15, где 0 - это света нет, а 15 - получает прямой солнечный свет
|
||||
*/
|
||||
Block getBlock(int x, int y, int z);
|
||||
default int getSkyLight(int x, int y, int z) {
|
||||
return getSkyLightLocal(x >> 4, y >> 4, z >> 4);
|
||||
}
|
||||
|
||||
int getSkyLight(int x, int y, int z);
|
||||
void setSkyLight(int x, int y, int z, int lightLevel);
|
||||
/**
|
||||
* Получить данные о естественной подсветке
|
||||
* @param x локальный X (0-15)
|
||||
* @param y локальный Y (0-15)
|
||||
* @param z локальный Z (0-15)
|
||||
* @return integer значение 0-15, где 0 - это света нет, а 15 - получает прямой солнечный свет
|
||||
*/
|
||||
int getSkyLightLocal(int x, int y, int z);
|
||||
|
||||
/**
|
||||
* Указать данные о естественной подсветке
|
||||
* @param x глобальный X
|
||||
* @param y глобальный Y
|
||||
* @param z глобальный Z
|
||||
* @param lightLevel значение 0-15, где 0 - это света нет, а 15 - получает прямой солнечный свет
|
||||
*/
|
||||
default void setSkyLight(int x, int y, int z, int lightLevel) {
|
||||
setSkyLightLocal(x >> 4, y >> 4, z >> 4, lightLevel);
|
||||
}
|
||||
|
||||
/**
|
||||
* Указать данные о естественной подсветке
|
||||
* @param x локальный X (0-15)
|
||||
* @param y локальный Y (0-15)
|
||||
* @param z локальный Z (0-15)
|
||||
* @param lightLevel значение 0-15, где 0 - это света нет, а 15 - получает прямой солнечный свет
|
||||
*/
|
||||
void setSkyLightLocal(int x, int y, int z, int lightLevel);
|
||||
|
||||
int getAddition(int x, int y, int z);
|
||||
void setAddition(int x, int y, int z, int value);
|
||||
|
||||
Biome getBiome(int localX, int localZ);
|
||||
/**
|
||||
* Получиь данные по биому
|
||||
* @param x глобальный X
|
||||
* @param z глобальный Z
|
||||
* @return
|
||||
*/
|
||||
default Biome getBiome(int x, int z) {
|
||||
return getBiomeLocal(x >> 4, z >> 4);
|
||||
}
|
||||
|
||||
/**
|
||||
* Получиь данные по биому
|
||||
* @param x локальный X (0-15)
|
||||
* @param z локальный Z (0-15)
|
||||
* @return
|
||||
*/
|
||||
Biome getBiomeLocal(int x, int z);
|
||||
}
|
||||
|
||||
@@ -150,11 +150,11 @@ public class ChunkDataPacket implements SCPacket {
|
||||
for (int y = 0; y < 16; y++) {
|
||||
for (int z = 0; z < 16; z++) {
|
||||
for (int x = 0; x < 16; x++) {
|
||||
palettedChunkSection.addBlock(chunkSection.getBlock(x, y, z));
|
||||
palettedChunkSection.addSkyLight(chunkSection.getSkyLight(x, y, z));
|
||||
palettedChunkSection.addBlock(chunkSection.getBlockLocal(x, y, z));
|
||||
palettedChunkSection.addSkyLight(chunkSection.getSkyLightLocal(x, y, z));
|
||||
|
||||
if (biomeWrite) {
|
||||
biomes.writeByte(chunkSection.getBiome(x, z).getId());
|
||||
biomes.writeByte(chunkSection.getBiomeLocal(x, z).getId());
|
||||
if (x == 15 && z == 15) {
|
||||
biomeWrite = false;
|
||||
}
|
||||
|
||||
@@ -26,12 +26,12 @@ public class SimpleChunk implements Chunk {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Biome getBiome(int localX, int localZ) {
|
||||
public Biome getBiomeLocal(int x, int z) {
|
||||
return biome;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBiome(int localX, int localZ, Biome biome) {
|
||||
public void setBiomeLocal(int x, int z, Biome biome) {
|
||||
// ignore
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,13 +17,13 @@ public class SimpleChunkSection implements ChunkSection {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getSkyLight(int x, int y, int z) {
|
||||
public int getSkyLightLocal(int x, int y, int z) {
|
||||
if (y <= 3) return 0;
|
||||
else return 15;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSkyLight(int x, int y, int z, int lightLevel) {
|
||||
public void setSkyLightLocal(int x, int y, int z, int lightLevel) {
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -36,7 +36,7 @@ public class SimpleChunkSection implements ChunkSection {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Biome getBiome(int localX, int localZ) {
|
||||
public Biome getBiomeLocal(int x, int z) {
|
||||
return Biome.PLAINS;
|
||||
}
|
||||
|
||||
@@ -60,7 +60,7 @@ public class SimpleChunkSection implements ChunkSection {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Block getBlock(int x, int y, int z) {
|
||||
public Block getBlockLocal(int x, int y, int z) {
|
||||
if (x < 0) x = 0;
|
||||
else if (x > 15) x = 15;
|
||||
if (y < 0) y = 0;
|
||||
|
||||
Reference in New Issue
Block a user