diff --git a/src/main/java/com/zixiken/dimdoors/items/ItemRiftConnectionTool.java b/src/main/java/com/zixiken/dimdoors/items/ItemRiftConnectionTool.java index fe5dfde2..c22d9911 100644 --- a/src/main/java/com/zixiken/dimdoors/items/ItemRiftConnectionTool.java +++ b/src/main/java/com/zixiken/dimdoors/items/ItemRiftConnectionTool.java @@ -5,6 +5,8 @@ */ package com.zixiken.dimdoors.items; +import com.zixiken.dimdoors.DimDoors; +import com.zixiken.dimdoors.shared.RiftRegistry; import com.zixiken.dimdoors.tileentities.DDTileEntityBase; import java.util.Set; import net.minecraft.block.Block; @@ -12,6 +14,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.ItemTool; +import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ActionResult; import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumHand; @@ -24,22 +27,51 @@ import net.minecraft.world.World; * @author Robijnvogel */ public class ItemRiftConnectionTool extends ItemTool { - - ItemRiftConnectionTool(float attackDamageIn, float attackSpeedIn, Item.ToolMaterial materialIn, Set effectiveBlocksIn){ + + ItemRiftConnectionTool(float attackDamageIn, float attackSpeedIn, Item.ToolMaterial materialIn, Set effectiveBlocksIn) { super(attackDamageIn, attackSpeedIn, materialIn, effectiveBlocksIn); - //@todo add extra stuff + //@todo add extra stuff? } - //@todo actually implement this item as a tool and stuff + @Override public ActionResult onItemRightClick(ItemStack stack, World worldIn, EntityPlayer playerIn, EnumHand hand) { RayTraceResult hit = ItemDoorBase.doRayTrace(worldIn, playerIn, true); if (hit != null) { BlockPos pos = hit.getBlockPos(); if (worldIn.getTileEntity(pos) instanceof DDTileEntityBase) { - //@todo implementation here? + DDTileEntityBase rift = (DDTileEntityBase) worldIn.getTileEntity(pos); + if (!playerIn.isSneaking()) { + selectPrimaryRift(stack, rift); + } else { + selectSecondaryRiftAndTakeAction(stack, rift); + } return new ActionResult(EnumActionResult.PASS, stack); } } return new ActionResult(EnumActionResult.FAIL, stack); } + + private void selectPrimaryRift(ItemStack stack, DDTileEntityBase rift) { + NBTTagCompound compound = stack.getTagCompound(); + compound.setInteger("primaryRiftID", rift.riftID); + } + + private void selectSecondaryRiftAndTakeAction(ItemStack stack, DDTileEntityBase rift) { + NBTTagCompound compound = stack.getTagCompound(); + if (!compound.hasKey("isInConnectMode")) { + compound.setBoolean("isInConnectMode", true); + } + if (compound.getBoolean("isInConnectMode")) { + if (compound.hasKey("primaryRiftID")) { + int primaryRiftID = compound.getInteger("primaryRiftID"); + int secondaryRiftID = rift.riftID; + RiftRegistry.Instance.pair(primaryRiftID, secondaryRiftID); + } else { + DimDoors.log(this.getClass(), "Primary Rift not selected. First select a primary rift by right-clicking without sneaking."); + } + } else { + int secondaryRiftID = rift.riftID; + RiftRegistry.Instance.unpair(secondaryRiftID); + } + } }