Archived
0

почти успешная загрузка карты

зафиксированы следующие ошибки:
- не прогружаются некоторые чанки (совсем);
- не отображаюся некоторые чанки (пока не пнёшь);
- секция чанка некоректно загружается, если там есть сундук;
- местами некорректно отображаются данные о block light.
This commit is contained in:
2018-11-04 15:20:07 +03:00
parent 70835fe1ea
commit bd2991abaa
4 changed files with 135 additions and 19 deletions

View File

@@ -3,6 +3,7 @@ package mc.core.world.block;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import mc.core.world.chunk.ChunkSection;
@NoArgsConstructor
@AllArgsConstructor
@@ -20,6 +21,14 @@ public class BlockLocation implements Cloneable {
this.z = z;
}
public BlockLocation toGlobal(ChunkSection chunkSection) {
return new BlockLocation(
(chunkSection.getX() << 8) + x,
(chunkSection.getY() << 8) + y,
(chunkSection.getZ() << 8) + z
);
}
@Override
public BlockLocation clone() {
try {

View File

@@ -2,10 +2,12 @@ package mc.core.world.block;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import java.util.Arrays;
import java.util.stream.Stream;
@Slf4j
@RequiredArgsConstructor
public enum BlockType {
AIR(0, 0),
@@ -15,23 +17,119 @@ public enum BlockType {
ANDESITE(1, 5),
GRASS(2, 0),
DIRT(3, 0),
COBBLESTONE(4, 0),
BEDROCK(7, 0),
WATER(9, 0),
LAVA(11, 0),
FLOWING_WATER (8, 0),
FLOWING_WATER_1(8, 1),
FLOWING_WATER_2(8, 2),
FLOWING_WATER_3(8, 3),
FLOWING_WATER_4(8, 4),
FLOWING_WATER_5(8, 5),
FLOWING_WATER_6(8, 6),
FLOWING_WATER_7(8, 7),
WATER (9, 0),
WATER_1 (9, 1),
WATER_2 (9, 2),
WATER_3 (9, 3),
WATER_4 (9, 4),
WATER_5 (9, 5),
WATER_6 (9, 6),
WATER_7 (9, 7),
WATER_8 (9, 8),
WATER_9 (9, 9),
WATER_10(9, 10),
WATER_11(9, 11),
WATER_12(9, 12),
WATER_13(9, 13),
WATER_14(9, 14),
WATER_15(9, 15),
FLOWING_LAVA (10, 0),
FLOWING_LAVA_1(10, 1),
FLOWING_LAVA_2(10, 2),
FLOWING_LAVA_3(10, 3),
FLOWING_LAVA_4(10, 4),
FLOWING_LAVA_5(10, 5),
FLOWING_LAVA_6(10, 6),
FLOWING_LAVA_7(10, 7),
LAVA (11, 0),
LAVA_1 (11, 1),
LAVA_2 (11, 2),
LAVA_3 (11, 3),
LAVA_4 (11, 4),
LAVA_5 (11, 5),
LAVA_6 (11, 6),
LAVA_7 (11, 7),
LAVA_8 (11, 8),
LAVA_9 (11, 9),
LAVA_10(11, 10),
LAVA_11(11, 11),
LAVA_12(11, 12),
LAVA_13(11, 13),
LAVA_14(11, 14),
LAVA_15(11, 15),
SAND(12, 0),
GOLD_ORE(14, 0),
IRON_ORE(15, 0),
COAL_ORE(16, 0),
LAPIS_ORE(21, 0),
DIAMOND_ORE(56, 0),
REDSTONE_ORE(73, 0),
SNOW(78, 0);
GRAVEL(13, 0),
ORE_GOLD(14, 0),
ORE_IRON(15, 0),
ORE_COAL(16, 0),
WOOD_OAK (17, 0),
WOOD_SPRUCE (17, 1),
WOOD_BIRCH (17, 2),
WOOD_JUNGLE (17, 3),
WOOD_BIRCH_X(17, 4),
WOOD_BIRCH_Z(17, 8),
LEAVES_OAK (18, 0),
LEAVES_SPRUCE(18, 1),
LEAVES_BIRCH (18, 2),
LEAVES_JUNGLE(18, 3),
LEAVES_8 (18, 8),
LEAVES_9 (18, 9),
LEAVES_10 (18, 10),
ORE_LAPIS(21, 0),
SANDSTONE(24, 0),
TALLGRASS(31, 1),
DANDELION(37, 0),
POPPY(38, 0),
MUSHROOM_BROWN(39, 0),
MUSHROOM_RED(40, 0),
MOSS_STONE(48, 0),
OBSIDIAN(49, 0),
MONSTER_SPAWNER(52, 0),
//BAG CHUNK
// CHEST_NORTH(54, 2),
// CHEST_SOUTH(54, 3),
// CHEST_WEST (54, 4),
// CHEST_EAST (54, 5),
ORE_DIAMOND(56, 0),
ORE_REDSTONE(73, 0),
ORE_GLOWING_REDSTONE(74, 0),
SNOW(78, 0),
CLAY(82, 0),
SUGAR_CANES(83, 0),
PUMPKIN_SOUTH(86, 0),
PUMPKIN_WEST (86, 1),
PUMPKIN_NORTH(86, 2),
PUMPKIN_EAST (86, 3),
STONE_MONSTER_EGG(97, 0),
ORE_EMERALD(129, 0),
LILAC(175, 1),
ROSE_BUSH(175, 4),
PEONY(175, 5),
ROSE_BUSH_10(175, 10);
public static BlockType getByIdMeta(int id, int meta) {
if (id < 0) {
log.warn("Incorrect id \"{}\"", id);
return BEDROCK;
}
Stream<BlockType> stream = Arrays.stream(BlockType.values());
return stream.filter(blockType -> blockType.id == id && blockType.meta == meta)
.findFirst()
.orElse(BlockType.AIR);
.orElseGet(() -> {
log.warn("Unknow block type: {}:{}", id, meta);
return BEDROCK;
});
}
@Getter