Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package yesodmod.general.item;
- import java.util.List;
- import net.minecraft.block.Block;
- import net.minecraft.client.Minecraft;
- import net.minecraft.creativetab.CreativeTabs;
- import net.minecraft.entity.player.EntityPlayer;
- import net.minecraft.item.Item;
- import net.minecraft.item.ItemStack;
- import net.minecraft.nbt.NBTTagCompound;
- import net.minecraft.nbt.NBTTagList;
- import net.minecraft.util.ChatComponentText;
- import net.minecraft.util.MovingObjectPosition;
- import net.minecraft.util.MovingObjectPosition.MovingObjectType;
- import net.minecraft.world.World;
- public class TransferStaff extends Item {
- private final int MAX_RANGE = 50;
- public TransferStaff() {
- super();
- maxStackSize = 1;
- setCreativeTab(CreativeTabs.tabTools);
- setUnlocalizedName("TransferStaff");
- setTextureName("yesodmod:enderstaff");
- }
- public void onCreated(ItemStack itemStack, World world, EntityPlayer player) {
- itemStack.stackTagCompound = new NBTTagCompound();
- int[] blockArray = new int[MAX_RANGE * MAX_RANGE * MAX_RANGE];
- itemStack.stackTagCompound.setIntArray("blockArray", blockArray );
- itemStack.stackTagCompound.setBoolean("blockStored", false);
- }
- public void addInformation(ItemStack itemStack, EntityPlayer player, List list, boolean par4)
- {
- if (itemStack.stackTagCompound != null)
- {
- boolean blockStored = itemStack.stackTagCompound.getBoolean("blockStored");
- list.add("Stored Block : " + blockStored);
- }
- }
- public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer player)
- {
- if (!player.isSneaking())
- {
- MovingObjectPosition selectedBlock = Minecraft.getMinecraft().objectMouseOver;
- if (selectedBlock != null && selectedBlock.typeOfHit == MovingObjectType.BLOCK)
- {
- int xBlockPos = selectedBlock.blockX;
- int yBlockPos = selectedBlock.blockY;
- int zBlockPos = selectedBlock.blockZ;
- if ( itemStack.stackTagCompound != null)
- {
- if (!hasSavedBlock(itemStack))
- {
- if (!hasFirstBlock(itemStack))
- {
- saveBlockPosition(itemStack, player, "FirstBlock", xBlockPos, yBlockPos, zBlockPos);
- if (!world.isRemote)
- player.addChatMessage(new ChatComponentText("First block Coordinate setted at: " + xBlockPos + ", " + yBlockPos + ", " + zBlockPos + ", "));
- }
- else if (!hasLastBlock(itemStack))
- {
- saveBlockPosition(itemStack, player, "LastBlock", xBlockPos, yBlockPos, zBlockPos);
- if (!world.isRemote)
- player.addChatMessage(new ChatComponentText("Second block Coordinate set at: " + xBlockPos + ", " + yBlockPos + ", " + zBlockPos + ", "));
- }
- else
- {
- itemStack.stackTagCompound.removeTag("FirstBlock");
- itemStack.stackTagCompound.removeTag("LastBlock");
- saveBlockPosition(itemStack, player, "FirstBlock", xBlockPos, yBlockPos, zBlockPos);
- if (!world.isRemote)
- player.addChatMessage(new ChatComponentText("First block Coordinate set at : " + xBlockPos + ", " + yBlockPos + ", " + zBlockPos + ", "));
- }
- }
- }
- }
- }
- if (player.isSneaking())
- {
- if ( itemStack.stackTagCompound == null)
- {
- itemStack.setTagCompound(new NBTTagCompound());
- }
- if (hasSavedBlock(itemStack) == false)
- {
- storeBlock(itemStack, world);
- if (!world.isRemote)
- player.addChatMessage(new ChatComponentText("Blocks Stored"));
- }
- else
- {
- placeBlock(itemStack, world);
- itemStack.stackTagCompound.setBoolean("blockStored", false);
- itemStack.stackTagCompound.removeTag("FirstBlock");
- itemStack.stackTagCompound.removeTag("LastBlock");
- if (!world.isRemote)
- player.addChatMessage(new ChatComponentText("Blocks Placed"));
- }
- }
- return itemStack;
- }
- private boolean hasSavedBlock(ItemStack itemStack)
- {
- return itemStack.stackTagCompound.getBoolean("blockStored");
- }
- private boolean hasFirstBlock(ItemStack itemStack)
- {
- return itemStack.stackTagCompound != null && itemStack.stackTagCompound.hasKey("FirstBlock");
- }
- private boolean hasLastBlock(ItemStack itemStack)
- {
- return itemStack.stackTagCompound != null && itemStack.stackTagCompound.hasKey("LastBlock");
- }
- private void saveBlockPosition(ItemStack itemStack , EntityPlayer player , String block, int xBlockPos, int yBlockPos, int zBlockPos)
- {
- if (itemStack.stackTagCompound == null)
- {
- itemStack.setTagCompound(new NBTTagCompound());
- }
- if (!itemStack.stackTagCompound.hasKey(block))
- {
- itemStack.stackTagCompound.setTag(block, new NBTTagList());
- }
- NBTTagList positionTagList = (NBTTagList)itemStack.stackTagCompound.getTag(block);
- NBTTagCompound positionTag = new NBTTagCompound();
- positionTag.setInteger("x" + block, xBlockPos);
- positionTag.setInteger("y" + block, yBlockPos);
- positionTag.setInteger("z" + block, zBlockPos);
- positionTagList.appendTag(positionTag);
- }
- private void storeBlock(ItemStack itemStack, World world)
- { if (itemStack.stackTagCompound.hasKey("FirstBlock") && itemStack.stackTagCompound.hasKey("LastBlock"))
- {
- //acquisizione coordinate
- NBTTagList firstPositionTagList = (NBTTagList)itemStack.stackTagCompound.getTag("FirstBlock");
- NBTTagList lastPositionTagList = (NBTTagList)itemStack.stackTagCompound.getTag("LastBlock");
- NBTTagCompound firstPositionTag = (NBTTagCompound) firstPositionTagList.getCompoundTagAt(0);
- NBTTagCompound lastPositionTag = (NBTTagCompound) lastPositionTagList.getCompoundTagAt(0);
- int firstX = firstPositionTag.getInteger("xFirstBlock");
- int firstY = firstPositionTag.getInteger("yFirstBlock");
- int firstZ = firstPositionTag.getInteger("zFirstBlock");
- int lastX = lastPositionTag.getInteger("xLastBlock");
- int lastY = lastPositionTag.getInteger("yLastBlock");
- int lastZ = lastPositionTag.getInteger("zLastBlock");
- //controllo di quale รจ maggiore e quale minore
- int diffX = lastX - firstX;
- int diffY = lastY - firstY;
- int diffZ = lastZ - firstZ;
- if (firstX > lastX)
- {
- diffX = firstX - lastX;
- int tmp = firstX;
- firstX = lastX;
- lastX = tmp;
- }
- if (firstY > lastY)
- {
- diffY = firstY - lastY;
- int tmp = firstY;
- firstY = lastY;
- lastY = tmp;
- }
- if (firstZ > lastZ)
- {
- diffZ = firstZ - lastZ;
- int tmp = firstZ;
- firstZ = lastZ;
- lastZ = tmp;
- }
- //acquisizione blocchi
- int [] arrayBlock = new int[(diffX + 1) *( diffY + 1) * (diffZ + 1)];
- for (int i = firstZ; i <= lastZ; i++)
- {
- for (int j = firstY; j <= lastY ; j++)
- {
- for (int k = firstX; k <= lastX ; k++)
- {
- for (int l = 0 ; l < arrayBlock.length ; l++)
- {
- arrayBlock[l] = Block.getIdFromBlock(world.getBlock(k, j, i));
- world.setBlockToAir(k, j, i);
- }
- }
- }
- }
- itemStack.stackTagCompound.setIntArray("blockArray", arrayBlock );
- itemStack.stackTagCompound.setBoolean("blockStored", true);
- }
- }
- private void placeBlock(ItemStack itemStack, World world)
- {
- if (itemStack.stackTagCompound.getBoolean("blockStored"))
- {
- MovingObjectPosition selectedBlock = Minecraft.getMinecraft().objectMouseOver;
- if (selectedBlock != null && selectedBlock.typeOfHit == MovingObjectType.BLOCK)
- {
- int xBlockPos = selectedBlock.blockX;
- int yBlockPos = selectedBlock.blockY;
- int zBlockPos = selectedBlock.blockZ;
- }
- }
- itemStack.stackTagCompound.removeTag("blockArray");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement