// Path: src/main/java/myessentials/entities/api/BlockPos.java
// public class BlockPos implements IChatFormat {
//     private final int dim;
//     private final int x;
//     private final int y;
//     private final int z;
// 
//     public BlockPos(int x, int y, int z, int dim) {
//         this.x = x;
//         this.y = y;
//         this.z = z;
//         this.dim = dim;
//     }
// 
//     public int getDim() {
//         return dim;
//     }
// 
//     public int getX() {
//         return x;
//     }
// 
//     public int getY() {
//         return y;
//     }
// 
//     public int getZ() {
//         return z;
//     }
// 
//     @Override
//     public String toString() {
//         return toChatMessage().getUnformattedText();
//     }
// 
//     @Override
//     public boolean equals(Object other) {
//         if(other instanceof BlockPos) {
//             BlockPos otherBP = (BlockPos) other;
//             return otherBP.dim == dim && otherBP.x == x && otherBP.y == y && otherBP.z == z;
//         }
//         return super.equals(other);
//     }
// 
//     @Override
//     public IChatComponent toChatMessage() {
//         return MyEssentialsCore.instance.LOCAL.getLocalization("myessentials.format.blockpos", x, y, z, dim);
//     }
// }


import myessentials.entities.api.BlockPos;
import myessentials.utils.PlayerUtils;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.nbt.NBTTagString;
import net.minecraft.util.EnumChatFormatting;
package myessentials.entities.api.tool;


/**
 * A wrapper class for an instance of an itemstack which executes only on the server-side.
 */
public abstract class Tool {

    /**
     * Every tool starts with this string. Allows easy checks for invalid tools.
     */
    public static final String IDENTIFIER = EnumChatFormatting.BLUE.toString();

    protected EntityPlayer owner;

    /**
     * This is used as an identifier to find the itemstack in the player's inventory.
     */
    protected String toolName;

    protected Tool(EntityPlayer owner, String toolName) {
        this.owner = owner;
        this.toolName = IDENTIFIER + toolName;
    }

// Path: src/main/java/myessentials/entities/api/BlockPos.java
// public class BlockPos implements IChatFormat {
//     private final int dim;
//     private final int x;
//     private final int y;
//     private final int z;
// 
//     public BlockPos(int x, int y, int z, int dim) {
//         this.x = x;
//         this.y = y;
//         this.z = z;
//         this.dim = dim;
//     }
// 
//     public int getDim() {
//         return dim;
//     }
// 
//     public int getX() {
//         return x;
//     }
// 
//     public int getY() {
//         return y;
//     }
// 
//     public int getZ() {
//         return z;
//     }
// 
//     @Override
//     public String toString() {
//         return toChatMessage().getUnformattedText();
//     }
// 
//     @Override
//     public boolean equals(Object other) {
//         if(other instanceof BlockPos) {
//             BlockPos otherBP = (BlockPos) other;
//             return otherBP.dim == dim && otherBP.x == x && otherBP.y == y && otherBP.z == z;
//         }
//         return super.equals(other);
//     }
// 
//     @Override
//     public IChatComponent toChatMessage() {
//         return MyEssentialsCore.instance.LOCAL.getLocalization("myessentials.format.blockpos", x, y, z, dim);
//     }
// }


// Path: src/main/java/myessentials/entities/api/tool/Tool.java
import myessentials.entities.api.BlockPos;
import myessentials.utils.PlayerUtils;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.nbt.NBTTagString;
import net.minecraft.util.EnumChatFormatting;

package myessentials.entities.api.tool;


/**
 * A wrapper class for an instance of an itemstack which executes only on the server-side.
 */
public abstract class Tool {

    /**
     * Every tool starts with this string. Allows easy checks for invalid tools.
     */
    public static final String IDENTIFIER = EnumChatFormatting.BLUE.toString();

    protected EntityPlayer owner;

    /**
     * This is used as an identifier to find the itemstack in the player's inventory.
     */
    protected String toolName;

    protected Tool(EntityPlayer owner, String toolName) {
        this.owner = owner;
        this.toolName = IDENTIFIER + toolName;
    }

    public abstract void onItemUse(BlockPos bp, int face);