Archived
0

обновление интерфейсов пакета mc.core.world.*

выделены методы для локальных и глобальных координат + добавлена документация
This commit is contained in:
2018-10-28 20:45:47 +03:00
parent 2e2fc13615
commit 58334591d0
7 changed files with 176 additions and 26 deletions

View File

@@ -1,7 +1,3 @@
/*
* DmitriyMX <dimon550@gmail.com>
* 2018-04-15
*/
package mc.core.world; package mc.core.world;
import mc.core.EntityLocation; import mc.core.EntityLocation;
@@ -21,14 +17,26 @@ public interface World {
setSpawn(x, y, z, 0f, 0f); 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); Chunk getChunk(int x, int z);
void setChunk(int x, int z, Chunk chunkSection);
default Chunk getChunk(BlockLocation location) { default Chunk getChunk(BlockLocation location) {
return getChunk(location.getX() >> 4, location.getZ() >> 4); return getChunk(location.getX() >> 4, location.getZ() >> 4);
} }
default Chunk getChunk(EntityLocation location) { default Chunk getChunk(EntityLocation location) {
return getChunk(location.getBlockX() >> 4, location.getBlockZ() >> 4); 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);
} }

View File

@@ -2,13 +2,67 @@ package mc.core.world.chunk;
import mc.core.world.Biome; import mc.core.world.Biome;
/* 16x256x16 */
public interface Chunk { public interface Chunk {
/**
* Глобальная координата X
* @return
*/
int getX(); int getX();
/**
* Глобальная координата Z
* @return
*/
int getZ(); int getZ();
/**
* Получить секцию чанка
* @param height высота (0-15)
* @return {@link mc.core.world.chunk.ChunkSection}
*/
ChunkSection getChunkSection(int height); ChunkSection getChunkSection(int height);
/**
* Установить секцию чанка
* @param height высота (0-15)
* @param chunkSection {@link mc.core.world.chunk.ChunkSection}
*/
void setChunkSection(int height, ChunkSection 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);
} }

View File

@@ -1,6 +1,12 @@
package mc.core.world.chunk; package mc.core.world.chunk;
public interface ChunkProvider { public interface ChunkProvider {
/**
* Получить чанк по координатам
* @param x глобальный X
* @param z глобальный Z
* @return {@link mc.core.world.chunk.Chunk}
*/
Chunk getChunk(int x , int z); Chunk getChunk(int x , int z);
void saveChunk(Chunk chunk); void saveChunk(Chunk chunk);

View File

@@ -5,26 +5,108 @@ import mc.core.world.block.Block;
/* 16x16x16 */ /* 16x16x16 */
public interface ChunkSection { public interface ChunkSection {
/**
* Глобальная координата X
* @return
*/
int getX(); int getX();
/**
* Высота
* @return
*/
int getY(); int getY();
/**
* Глобальная координата Z
* @return
*/
int getZ(); 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); void setBlock(Block block);
/** /**
* Получить блок по внутренним координатам * Получить данные о естественной подсветке
* @param x X * @param x глобальный X
* @param y Y * @param y глобальный Y
* @param z Z * @param z глобальный Z
* @return {@link mc.core.world.block.Block} * @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); int getAddition(int x, int y, int z);
void setAddition(int x, int y, int z, int value); 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);
} }

View File

@@ -150,11 +150,11 @@ public class ChunkDataPacket implements SCPacket {
for (int y = 0; y < 16; y++) { for (int y = 0; y < 16; y++) {
for (int z = 0; z < 16; z++) { for (int z = 0; z < 16; z++) {
for (int x = 0; x < 16; x++) { for (int x = 0; x < 16; x++) {
palettedChunkSection.addBlock(chunkSection.getBlock(x, y, z)); palettedChunkSection.addBlock(chunkSection.getBlockLocal(x, y, z));
palettedChunkSection.addSkyLight(chunkSection.getSkyLight(x, y, z)); palettedChunkSection.addSkyLight(chunkSection.getSkyLightLocal(x, y, z));
if (biomeWrite) { if (biomeWrite) {
biomes.writeByte(chunkSection.getBiome(x, z).getId()); biomes.writeByte(chunkSection.getBiomeLocal(x, z).getId());
if (x == 15 && z == 15) { if (x == 15 && z == 15) {
biomeWrite = false; biomeWrite = false;
} }

View File

@@ -26,12 +26,12 @@ public class SimpleChunk implements Chunk {
} }
@Override @Override
public Biome getBiome(int localX, int localZ) { public Biome getBiomeLocal(int x, int z) {
return biome; return biome;
} }
@Override @Override
public void setBiome(int localX, int localZ, Biome biome) { public void setBiomeLocal(int x, int z, Biome biome) {
// ignore // ignore
} }
} }

View File

@@ -17,13 +17,13 @@ public class SimpleChunkSection implements ChunkSection {
} }
@Override @Override
public int getSkyLight(int x, int y, int z) { public int getSkyLightLocal(int x, int y, int z) {
if (y <= 3) return 0; if (y <= 3) return 0;
else return 15; else return 15;
} }
@Override @Override
public void setSkyLight(int x, int y, int z, int lightLevel) { public void setSkyLightLocal(int x, int y, int z, int lightLevel) {
} }
@Override @Override
@@ -36,7 +36,7 @@ public class SimpleChunkSection implements ChunkSection {
} }
@Override @Override
public Biome getBiome(int localX, int localZ) { public Biome getBiomeLocal(int x, int z) {
return Biome.PLAINS; return Biome.PLAINS;
} }
@@ -60,7 +60,7 @@ public class SimpleChunkSection implements ChunkSection {
} }
@Override @Override
public Block getBlock(int x, int y, int z) { public Block getBlockLocal(int x, int y, int z) {
if (x < 0) x = 0; if (x < 0) x = 0;
else if (x > 15) x = 15; else if (x > 15) x = 15;
if (y < 0) y = 0; if (y < 0) y = 0;