package net.minecraft.server; public class ChunkSection { private final int yPos; private int nonEmptyBlockCount; private int tickingBlockCount; final DataPaletteBlock blockIds; // Paper - package private NibbleArray emittedLight; private NibbleArray skyLight; public ChunkSection(int i, boolean flag) { this.yPos = i; this.blockIds = new DataPaletteBlock(); this.emittedLight = new NibbleArray(); if (flag) { this.skyLight = new NibbleArray(); } } // CraftBukkit start public ChunkSection(int y, boolean flag, char[] blockIds) { this.yPos = y; this.blockIds = new DataPaletteBlock(); for (int i = 0; i < blockIds.length; i++) { int xx = i & 15; int yy = (i >> 8) & 15; int zz = (i >> 4) & 15; this.blockIds.setBlock(xx, yy, zz, Block.REGISTRY_ID.fromId(blockIds[i])); } this.emittedLight = new NibbleArray(); if (flag) { this.skyLight = new NibbleArray(); } recalcBlockCounts(); } // CraftBukkit end public IBlockData getType(int i, int j, int k) { return this.blockIds.a(i, j, k); } public void setType(int i, int j, int k, IBlockData iblockdata) { IBlockData iblockdata1 = this.getType(i, j, k); Block block = iblockdata1.getBlock(); Block block1 = iblockdata.getBlock(); if (block != Blocks.AIR) { --this.nonEmptyBlockCount; if (block.isTicking()) { --this.tickingBlockCount; } } if (block1 != Blocks.AIR) { ++this.nonEmptyBlockCount; if (block1.isTicking()) { ++this.tickingBlockCount; } } this.blockIds.setBlock(i, j, k, iblockdata); } public boolean a() { return false; // CraftBukkit - MC-80966 } public boolean shouldTick() { return this.tickingBlockCount > 0; } public int getYPosition() { return this.yPos; } public void a(int i, int j, int k, int l) { this.skyLight.a(i, j, k, l); } public int b(int i, int j, int k) { return this.skyLight.a(i, j, k); } public void b(int i, int j, int k, int l) { this.emittedLight.a(i, j, k, l); } public int c(int i, int j, int k) { return this.emittedLight.a(i, j, k); } public void recalcBlockCounts() { this.nonEmptyBlockCount = 0; this.tickingBlockCount = 0; for (int i = 0; i < 16; ++i) { for (int j = 0; j < 16; ++j) { for (int k = 0; k < 16; ++k) { Block block = this.getType(i, j, k).getBlock(); if (block != Blocks.AIR) { ++this.nonEmptyBlockCount; if (block.isTicking()) { ++this.tickingBlockCount; } } } } } } public DataPaletteBlock getBlocks() { return this.blockIds; } public NibbleArray getEmittedLightArray() { return this.emittedLight; } public NibbleArray getSkyLightArray() { return this.skyLight; } public void a(NibbleArray nibblearray) { this.emittedLight = nibblearray; } public void b(NibbleArray nibblearray) { this.skyLight = nibblearray; } }