246 lines
6.5 KiB
Java
Executable file
246 lines
6.5 KiB
Java
Executable file
/**
|
|
* 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);
|
|
}
|
|
}
|