All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.minecraft.server.ChunkSection Maven / Gradle / Ivy

package net.minecraft.server;

public class ChunkSection {

  private final int yPos;
  private int nonEmptyBlockCount;
  private int tickingBlockCount;
  private char[] blockIds;
  private NibbleArray emittedLight;
  private NibbleArray skyLight;

  public ChunkSection(int i, boolean flag) {
    this.yPos = i;
    this.blockIds = new char[4096];
    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 = blockIds;
    this.emittedLight = new NibbleArray();
    if (flag) {
      this.skyLight = new NibbleArray();
    }
    recalcBlockCounts();
  }
  // CraftBukkit end

  public IBlockData getType(int i, int j, int k) {
    IBlockData iblockdata = Block.d.a(this.blockIds[j << 8 | k << 4 | i]);

    return iblockdata != null ? iblockdata : Blocks.AIR.getBlockData();
  }

  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[j << 8 | k << 4 | i] = (char) Block.d.b(iblockdata);
  }

  public Block b(int i, int j, int k) {
    return this.getType(i, j, k).getBlock();
  }

  public int c(int i, int j, int k) {
    IBlockData iblockdata = this.getType(i, j, k);

    return iblockdata.getBlock().toLegacyData(iblockdata);
  }

  public boolean a() {
    return this.nonEmptyBlockCount == 0;
  }

  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 d(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 e(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.b(i, j, k);

          if (block != Blocks.AIR) {
            ++this.nonEmptyBlockCount;
            if (block.isTicking()) {
              ++this.tickingBlockCount;
            }
          }
        }
      }
    }

  }

  public char[] getIdArray() {
    return this.blockIds;
  }

  public void a(char[] achar) {
    this.blockIds = achar;
  }

  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;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy