Package buildcraft.core.blueprints

Source Code of buildcraft.core.blueprints.Template

/**
* Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team
* http://www.mod-buildcraft.com
*
* BuildCraft is distributed under the terms of the Minecraft Mod Public
* License 1.0, or MMPL. Please check the contents of the license located in
* http://www.mod-buildcraft.com/MMPL-1.0.txt
*/
package buildcraft.core.blueprints;

import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;

import buildcraft.BuildCraftBuilders;
import buildcraft.api.blueprints.IBuilderContext;
import buildcraft.api.blueprints.SchematicMask;
import buildcraft.api.core.BuildCraftAPI;
import buildcraft.builders.blueprints.BlueprintId.Kind;
import buildcraft.core.utils.NBTUtils;

/**
* Use the template system to describe fillers
*/
public class Template extends BlueprintBase {

  public Template() {
    id.kind = Kind.Template;
  }

  public Template(int sizeX, int sizeY, int sizeZ) {
    super(sizeX, sizeY, sizeZ);

    id.kind = Kind.Template;
  }

  @Override
  public void readFromWorld(IBuilderContext context, TileEntity anchorTile, int x, int y, int z) {
    int posX = (int) (x - context.surroundingBox().pMin().x);
    int posY = (int) (y - context.surroundingBox().pMin().y);
    int posZ = (int) (z - context.surroundingBox().pMin().z);

    if (!BuildCraftAPI.isSoftBlock(anchorTile.getWorldObj(), x, y, z)) {
      contents[posX][posY][posZ] = new SchematicMask(true);
    }
  }

  @Override
  public void saveContents(NBTTagCompound nbt) {
    // Note: this way of storing data is suboptimal, we really need a bit
    // per mask entry, not a byte. However, this is fine, as compression
    // will fix it.

    byte [] data = new byte[sizeX * sizeY * sizeZ];
    int ind = 0;

    for (int x = 0; x < sizeX; ++x) {
      for (int y = 0; y < sizeY; ++y) {
        for (int z = 0; z < sizeZ; ++z) {
          data [ind] = (byte) ((contents[x][y][z] == null) ? 0 : 1);
          ind++;
        }
      }
    }

    nbt.setByteArray("mask", data);
  }

  @Override
  public void loadContents(NBTTagCompound nbt) throws BptError {
    byte [] data = nbt.getByteArray("mask");
    int ind = 0;

    for (int x = 0; x < sizeX; ++x) {
      for (int y = 0; y < sizeY; ++y) {
        for (int z = 0; z < sizeZ; ++z) {
          if (data [ind] == 1) {
            contents[x][y][z] = new SchematicMask(true);
          }

          ind++;
        }
      }
    }
  }

  @Override
  public ItemStack getStack () {
    ItemStack stack = new ItemStack(BuildCraftBuilders.templateItem, 1);
    NBTTagCompound nbt = NBTUtils.getItemData(stack);
    id.write (nbt);
    nbt.setString("author", author);
    nbt.setString("name", id.name);

    return stack;
  }

}
TOP

Related Classes of buildcraft.core.blueprints.Template

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.