Package buildcraft.core

Source Code of buildcraft.core.ItemMapLocation

/**
* 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;

import java.util.List;

import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;

import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

import net.minecraftforge.common.util.Constants;
import net.minecraftforge.common.util.ForgeDirection;

import buildcraft.api.boards.RedstoneBoardRegistry;
import buildcraft.api.core.BlockIndex;
import buildcraft.api.core.IBox;
import buildcraft.api.core.IZone;
import buildcraft.builders.TileMarker;
import buildcraft.builders.TilePathMarker;
import buildcraft.core.utils.NBTUtils;
import buildcraft.core.utils.StringUtils;

public class ItemMapLocation extends ItemBuildCraft {

  public IIcon clean;
  public IIcon spot;
  public IIcon area;
  public IIcon path;
  public IIcon zone;

  public ItemMapLocation() {
    super(CreativeTabBuildCraft.ITEMS);
  }

  @Override
  public int getItemStackLimit(ItemStack stack) {
    return NBTUtils.getItemData(stack).hasKey("kind") ? 1 : 16;
  }

  @Override
  public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean advanced) {
    NBTTagCompound cpt = NBTUtils.getItemData(stack);

    if (!cpt.hasKey("kind")) {
    } else {
      switch (cpt.getByte("kind")) {
      case 0: {
        int x = cpt.getInteger("x");
        int y = cpt.getInteger("y");
        int z = cpt.getInteger("z");
        ForgeDirection side = ForgeDirection.values()[cpt.getByte("side")];

        list.add(StringUtils.localize("{" + x + ", " + y + ", " + z + ", " + side + "}"));
        break;
      }
      case 1: {
        int x = cpt.getInteger("xMin");
        int y = cpt.getInteger("yMin");
        int z = cpt.getInteger("zMin");
        int xLength = cpt.getInteger("xMax") - x + 1;
        int yLength = cpt.getInteger("yMax") - y + 1;
        int zLength = cpt.getInteger("zMax") - z + 1;

        list.add(StringUtils.localize("{" + x + ", " + y + ", " + z + "} + {" + xLength + " x " + yLength + " x " + zLength + "}"));
        break;
      }
      case 2: {
        NBTTagList pathNBT = cpt.getTagList("path", Constants.NBT.TAG_COMPOUND);
        BlockIndex first = new BlockIndex(pathNBT.getCompoundTagAt(0));

        int x = first.x;
        int y = first.y;
        int z = first.z;

        list.add(StringUtils.localize("{" + x + ", " + y + ", " + z + "} + " + pathNBT.tagCount() + " elements"));
        break;
      }
      case 3: {
        break;
      }
      }
    }

    if (cpt.hasKey("kind")) {
    }
  }

  @Override
  public IIcon getIconIndex(ItemStack stack) {
    NBTTagCompound cpt = NBTUtils.getItemData(stack);

    if (!cpt.hasKey("kind")) {
      itemIcon = clean;
    } else {
      switch (cpt.getByte("kind")) {
      case 0:
        itemIcon = spot;
        break;
      case 1:
        itemIcon = area;
        break;
      case 2:
        itemIcon = path;
        break;
      case 3:
        itemIcon = zone;
        break;
      }
    }

    return itemIcon;
  }

  @Override
  @SideOnly(Side.CLIENT)
  public void registerIcons(IIconRegister par1IconRegister) {
    clean = par1IconRegister.registerIcon("buildcraft:map_clean");
    spot = par1IconRegister.registerIcon("buildcraft:map_spot");
    area = par1IconRegister.registerIcon("buildcraft:map_area");
    path = par1IconRegister.registerIcon("buildcraft:map_path");
    zone = par1IconRegister.registerIcon("buildcraft:map_zone");

    RedstoneBoardRegistry.instance.registerIcons(par1IconRegister);
  }

  @Override
  public boolean onItemUse(ItemStack stack, EntityPlayer par2EntityPlayer, World world, int x,
      int y, int z, int side, float par8, float par9, float par10) {
    TileEntity tile = world.getTileEntity(x, y, z);
    NBTTagCompound cpt = NBTUtils.getItemData(stack);

    if (tile instanceof TilePathMarker) {
      cpt.setByte("kind", (byte) 2);

      TilePathMarker pathTile = (TilePathMarker) tile;

      NBTTagList pathNBT = new NBTTagList();

      for (BlockIndex index : pathTile.getPath()) {
        NBTTagCompound nbt = new NBTTagCompound();
        index.writeTo(nbt);
        pathNBT.appendTag(nbt);
      }

      cpt.setTag("path", pathNBT);
    } else if (tile instanceof TileMarker) {
      cpt.setByte("kind", (byte) 1);

      TileMarker areaTile = (TileMarker) tile;

      cpt.setInteger("xMin", areaTile.xMin());
      cpt.setInteger("yMin", areaTile.yMin());
      cpt.setInteger("zMin", areaTile.zMin());
      cpt.setInteger("xMax", areaTile.xMax());
      cpt.setInteger("yMax", areaTile.yMax());
      cpt.setInteger("zMax", areaTile.zMax());

    } else {
      cpt.setByte("kind", (byte) 0);

      cpt.setByte("side", (byte) side);
      cpt.setInteger("x", x);
      cpt.setInteger("y", y);
      cpt.setInteger("z", z);
    }

    return true;
  }

  public static BlockIndex getBlockIndex(ItemStack item) {
    NBTTagCompound cpt = NBTUtils.getItemData(item);

    if (cpt.hasKey("kind") && cpt.getByte("kind") == 0) {
      int x = cpt.getInteger("x");
      int y = cpt.getInteger("y");
      int z = cpt.getInteger("z");

      return new BlockIndex(x, y, z);
    } else {
      return null;
    }
  }

  public static IBox getBox(ItemStack item) {
    NBTTagCompound cpt = NBTUtils.getItemData(item);

    if (cpt.hasKey("kind") && cpt.getByte("kind") == 1) {
      int xMin = cpt.getInteger("xMin");
      int yMin = cpt.getInteger("yMin");
      int zMin = cpt.getInteger("zMin");
      int xMax = cpt.getInteger("xMax");
      int yMax = cpt.getInteger("yMax");
      int zMax = cpt.getInteger("zMax");

      return new Box(xMin, yMin, zMin, xMax, yMax, zMax);
    } else {
      return null;
    }
  }

  public static ForgeDirection getSide(ItemStack item) {
    NBTTagCompound cpt = NBTUtils.getItemData(item);

    if (cpt.hasKey("kind") && cpt.getByte("kind") == 0) {
      return ForgeDirection.values()[cpt.getByte("side")];
    } else {
      return ForgeDirection.UNKNOWN;
    }
  }

  public static IZone getZone(ItemStack item) {
    NBTTagCompound cpt = NBTUtils.getItemData(item);

    if (cpt.hasKey("kind") && cpt.getByte("kind") == 3) {
      ZonePlan plan = new ZonePlan();
      plan.readFromNBT(cpt);

      return plan;
    } else if (cpt.hasKey("kind") && cpt.getByte("kind") == 1) {
      return getBox(item);
    } else {
      return null;
    }
  }

  public static void setZone(ItemStack item, ZonePlan plan) {
    NBTTagCompound cpt = NBTUtils.getItemData(item);

    cpt.setByte("kind", (byte) 3);
    plan.writeToNBT(cpt);
  }
}
TOP

Related Classes of buildcraft.core.ItemMapLocation

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.